2012-04-13 6 views
6

어떻게 1 필드 만 사용하여 경과 시간을 표시 할 수 있습니까? 예를 들어JodaTime PeriodFormat, 1 필드 만있는 경과 시간

  • 기간 = 1 년 4 월 5 일 ==> 결과 =
  • 기간 = 3 개월 "1 년 전에"5 일 ==> 결과 = "3 개월 전에"
  • 기간 = 4 시간 5 분 ==> 결과 = "4 시간 전"

그래서 난 그냥 사용할 수있는 가장 높은 분야를 원한다.

+0

@JonSkeet - 그 색깔들! – assylias

답변

0

확실한 알고리즘은 연도> 0인지 테스트하는 것입니다.이 경우 월 사용량이 0보다 큰지 테스트해야합니다. 더 우아 할 수도 있지만 15 줄 미만의 코드에서만 작동합니다 ...

2

Joda-Time에는이 작업을 수행 할 방법이 없으므로 각 필드를 수동으로 차례로 테스트해야합니다.

1

이 하나의 하부에 더 큰주기에서

val startDate = new DateTime(millis).withZone(dateTimeZone) 
val endDate = new DateTime(dateTimeZone) 

val period = new Period(startDate, endDate) 

val localized = PeriodFormat.wordBased(localeLanguageCode).print(period) 
val splitted = localized.split(",|and") 

그래서, 스플릿 값은 시간 세그먼트를 포함하는 배열 것 일 것이다.

배열의 헤드가 찾고있는 값입니다.

slitted.head + "Ago." 

당신은 사용자 정의 포맷터가 아니라 기본 일 (PeriodFormatterBuilder)

예를 사용하여 로케일 또는 경우에 따라 분할 방법에 정규식 패턴을 변경해야합니다 *. 배열 ("4 년", "2 개월", "5 일", "18 시간", "15 분", "10 초", "50 밀리 초")

관련 문제