2012-04-13 15 views
6

Geçen zamanı yalnızca 1 alanıyla nasıl görüntüleyebiliriz. ÖrneğinJodaTime PeriodFormat, Sadece 1 ile geçen süre Alan

  • Dönemi = 1 Yıl 4 Ay ve 5 Gün ==> Sonuç =
  • Dönem = 3 Ay "1 Yıl önce" 5 Gün ==> Sonuç = "3 Ay önce"
  • Dönemi = 4 Saat 5 Dakika ==> Sonuç = "4 Saat önce"

Yani ben sadece mevcut en yüksek alanını istiyorum.

+0

@JonSkeet - Nasıl kurtulacağımı merak ediyordum bu renklerin! – assylias

cevap

0

Belirgin algoritma yıl> 0 olup olmadığını sınamaktır, bu durumda onu kullanırsınız, eğer ay> 0 vb. Sınamalarını sınamadıysanız Daha şık bir şey olabilir, ancak bu 15 satırdan az kodla çalışır ...

2

Bunu yapmak için Joda-Time'da herhangi bir yöntem yoktur, bu nedenle her alanı sırayla manuel olarak test etmeniz gerekir.

1

bu bir alt etmek daha büyük bir dönemden,

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") 

Yani, parçalı değer dönemi segmentleri içeren bir Array olacak çalışacaktır.

Dizinin başı, aradığınız değerdir.

slitted.head + "Ago." 

Sen özel bir biçimlendirici yerine varsayılan bir (PeriodFormatterBuilder)

Ör kullandığınız için Yerel veya eğer bağlı bölünmüş yöntemine REGEX desen değişmelidir *. Dizi ("4 yıl", "2 ay", "5 gün", "18 saat", "15 dakika", "10 saniye", "50 milisaniye")