2012-04-13 19 views
6

Come è possibile visualizzare il tempo trascorso con un solo campo.JodaTime PeriodFormat, tempo trascorso con solo 1 campo

Per esempio

  • Periodo = 1 anno 4 mesi e 5 giorni ==> Risultato = "1 anno fa"
  • Periodo = 3 Mesi 5 Giorni ==> Risultato = "3 mesi fa"
  • Periodo = 4 ore e 5 minuti ==> Risultato = "4 Ore fa"

Quindi, voglio solo il più alto campo disponibile.

+0

@JonSkeet - Mi chiedevo come sbarazzarmi di quei colori! – assylias

risposta

0

L'algoritmo ovvio sarebbe quello di verificare se anno> 0, nel qual caso lo si utilizza, se non si verifica se mese> 0 ecc. Potrebbe esserci qualcosa di più elegante ma che funzionerebbe in meno di 15 righe di codice ...

2

Non c'è alcun metodo in Joda-Time per eseguire questa operazione, quindi sarà necessario testare ciascun campo a sua volta manualmente.

1

questo funziona

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

Quindi, il valore spacco sarà un Array contenente i segmenti di periodo, da un periodo maggiore a quello inferiore.

Il capo dell'array è il valore che stai cercando.

slitted.head + "Ago." 

* Si dovrebbe cambiare il modello REGEX sul metodo split a seconda del Locale o se si utilizza una formattazione personalizzata, piuttosto che quello di default (PeriodFormatterBuilder)

Ex. Array ("4 anni", "2 mesi", "5 giorni", "18 ore", "15 minuti", "10 secondi", "50 millisecondi")

Problemi correlati