2015-01-26 6 views
1

Android Studio 프로젝트에서 joda-time-2.5를 사용하고 있습니다.Joda 시간 - 분/분을 월 단위로 계산할 수 없습니다.

년 및/또는 달로 문자열을 올바르게 포맷 할 수 없기 때문에 해결할 수 없습니다.

기간은 올바르게 계산되지만 "주"를 초과하지는 않습니다. 1000000 분이 올바르게 "99wks, 1day, 10hrs + 40mins"형식으로되어 있습니다. 그러나 몇 달/년 형식이 아닙니다. "일년는 10개월, 삼주, 일일,로 10 시간 + 40 분"는 등

나는

Period pA = new Period(mA); 

Period pA = new Period(mA, PeriodType.standard()); 

Period pA = new Period(mA, PeriodType.yearMonthDay()); 

등의 변화의 모든 종류의 시도했지만 이러한 차이를하지 않았다.

다양한 추가/제거를 시도했습니다. .appends/years/months/printZero - 차이가 없습니다.

나는 기간 단위를 변경 시도 : 나는 달 또는 몇 년을 사용하는 경우가 작동합니다 예를 들어

Months mA = Months.months(15); 

    Period pA = new Period(mA, PeriodType.standard()); 

올바르게 "일년, 3개월"를 생성합니다.

나는 '년'과 '개월'이 정확하지 않다는 것을 알고 있지만 (이 경우 실제로는 근사치가 될 것입니다.) 그러나 PeriodTypes/yearMonthDay 또는 표준이 처리 한 것은 무엇이라고 생각합니까?

나는 또한 PeriodFormat.getDefault().print(period)을 시도했지만 성공하지 못했습니다.

코드를 검색 :

private String formatTimeStr(int minutes){ 

    Minutes mA = Minutes.minutes(minutes); 

    Period pA = new Period(mA); 

    PeriodFormatter dhm = new PeriodFormatterBuilder() 
      .printZeroNever() 
      .appendYears() 
      .appendSuffix("year","years") 
      .appendSeparator(", ") 
      .appendMonths() 
      .appendSuffix("mnth", "mnths") 
      .appendSeparator(", ") 
      .appendWeeks() 
      .appendSuffix("wk", "wks") 
      .appendSeparator(", ") 
      .appendDays() 
      .appendSuffix("day", "days") 
      .appendSeparator(", ") 
      .appendHours() 
      .appendSuffix("hr", "hrs") 
      .appendSeparator(" & ") 
      .appendMinutes() 
      .appendSuffix("min", "mins") 
      .toFormatter(); 

    String formattedTimeStr = dhm.print(pA.normalizedStandard()); 

    return formattedTimeStr; 
} 
+0

분 입력을 추가하려면 ** 참조 타임 스탬프 **가 필요합니다. 그런 다음 '기간'계산을위한 기준으로 두 개의 타임 스탬프를 얻습니다. 그런 다음 분을 월, 요일을 혼합하여 변환 할 수 있어야합니다. –

답변

0

사실은 이미 분은 엄격한 의미에서 달로 변환 아니라는 것을 인식대로입니다. Joda-Time-documentation도 그것을 말해줍니다. 기간이 년 또는 몇 개월이 포함 된 경우

, 다음 달 표준화 는 0과 11 일 필드로 될 것이며 아래 개월 필드에 표준화 필요에 따라, 그러나이하지 않습니다 오버 플로우 될 것입니다 . 따라서 1 년 15 개월의 기간은 3 개월 동안 2 년으로 정상화됩니다. 그러나 1 개월 40 일은 1 개월로 유지됩니다. 40 일.

기술적으로 변환을위한 두 가지 옵션이 있습니다.

a) 참조 시간 소인을 정의하십시오. 그런 다음 다음을 수행 할 수

LocalDateTime tsp1 = new LocalDateTime(); // now as example 
LocalDateTime tsp2 = tsp1.plusMinutes(minutes); 
Period p = new Period(tsp1, tsp2, PeriodType.standard()); // or other period type? 

b) 귀하가 찾아 자신에게 시간 단위의 추정 길이에 따라 반올림 알고리즘을 개발한다. 예를 들어 30.5 일 또는 그와 비슷한 반올림 한 달을 기꺼이 받아 들일 수 있습니다. 소셜 미디어 시나리오에서 유스 케이스에 종종 해당되므로 유스 케이스가 절대적인 정밀도를 요구하지 않는다면 이는 공정한 솔루션으로 간주 될 수 있습니다. 내가 아는 한 Joda-Time은 다른 라이브러리와 달리 반올림 기능을 지원하지 않습니다.

+0

한숨. 실제로 실제로 설명서를 읽을 정도로 필사적이되었습니다. :) 그러나 어떻게 든 그 단락을 지나쳤습니다. 고맙습니다. 나는 귀하의 첫 번째 솔루션을 선택했고 그것은 단순히 '복사하여 붙여 넣기'와 같이 일했습니다. 건배. – meLoveJodaTimeLongTime