Frage

    

Diese Frage bereits eine Antwort hier:

    
            
  •              konvertieren JodaTime Dauer String                                      2 Antworten                          
  •     
    

Ich bin mit der Joda-Time Bibliothek mit Java. Ich bin einige Schwierigkeiten, die versuchen, eine Periode Objekt in eine Zeichenfolge im Format zu drehen „x Tage, x Stunden, x Minuten“.

Diese Periode Objekte zunächst durch Zugabe einer Menge von Sekunden, um sie erstellt (sie sind als Sekunden XML serialisiert und dann von ihnen neu). Wenn ich einfach die getHours () verwenden usw. Methoden in ihnen, alles, was ich bekommen Null ist und die total Menge von Sekunden mit getSeconds.

Wie kann ich Joda die Sekunden in die entsprechenden Felder berechnen, wie Tage, Stunden, etc ...?

War es hilfreich?

Lösung

Sie müssen die Zeit normalisieren, denn wenn man es mit der Gesamtzahl von Sekunden konstruieren, dann, dass der einzige Wert ist es hat. Normalisieren wird es bricht sie in die Gesamtzahl der Tage, Minuten, Sekunden, etc.

Bearbeiten von ripper234 - Hinzufügen einer TL; DR Version : PeriodFormat.getDefault().print(period)

Zum Beispiel:

public static void main(String[] args) {
  PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder()
    .appendDays()
    .appendSuffix(" day", " days")
    .appendSeparator(" and ")
    .appendMinutes()
    .appendSuffix(" minute", " minutes")
    .appendSeparator(" and ")
    .appendSeconds()
    .appendSuffix(" second", " seconds")
    .toFormatter();

  Period period = new Period(72, 24, 12, 0);

  System.out.println(daysHoursMinutes.print(period));
  System.out.println(daysHoursMinutes.print(period.normalizedStandard()));
}

Will Druck:

24 minutes and 12 seconds
3 days and 24 minutes and 12 seconds

So können Sie die Ausgabe für die nicht-normalisierte Zeit sehen können einfach ignoriert die Anzahl der Stunden (es hat nicht wandelt die 72 Stunden 3 Tage).

Andere Tipps

Sie können auch das Standard-Formatierungsprogramm verwenden, die für die meisten Fälle gut ist:

Period period = new Period(startDate, endDate);
System.out.println(PeriodFormat.getDefault().print(period))
    Period period = new Period();
    // prints 00:00:00
    System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds()));
    period = period.plusSeconds(60 * 60 * 12);
    // prints 00:00:43200
    System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds()));
    period = period.normalizedStandard();
    // prints 12:00:00
    System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds()));
PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder()
    .appendDays()
    **.appendSuffix(" day", " days")
    .appendSeparator(" and ")
    .appendMinutes()
    .appendSuffix(" minute", " minutes")**
    .appendSeparator(" and ")
    .appendSeconds()
    .appendSuffix(" second", " seconds")
    .toFormatter();

Sie die Stunden fehlt, das ist der Grund. Anfügen Stunden nach Tagen und Problem gelöst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top