2015-06-27 9 views
5

Zunächst einmal bin ich neu in java.time Paket.Drucken Sie eine Dauer in menschlich lesbaren Format von EL

Ich schreibe eine Webapp, die mit bestimmten Zeiten des Tages und mit mehreren Dauer der Ereignisse arbeiten muss.

Also schrieb ich meinen Code mit LocalTime und Duration Klassen von java.time Paket.

Wenn ich brauche ihr Wert in JSP machen es für LocalTime Objekt ist sehr einfach (da .toString() einen Mensch lesbaren vale zurückkehrt), so kann ich nur schreiben ${startTime} und alles geht in der richtigen Art und Weise (zB als 9:00 gemacht wird). Derselbe Ansatz funktioniert nicht für die Dauer, da seine Darstellung etwa PT20M ist (in diesem Fall für 20 Minuten).

Gibt es eine elegante Möglichkeit, eine lesbare Konvertierung in JSP direkt von EL durchzuführen?

Ja, ich weiß, ich kann das Objekt in einer Zeichenfolge in meinen Klassen (vor JSP) konvertieren, aber ich suche nach dem vorgeschlagenen Ansatz (den ich nicht finden kann) ... ein weiterer Punkt ist das Ich sehe keine offizielle "convert()" - Methode (oder was auch immer) im Duration-Objekt ... also denke ich, dass ich das falsche Objekt verwende, um eine Zeitdauer zuzuordnen (um LocalTime s hinzuzufügen oder zu subtrahieren).

Vielen Dank.

+1

Benötigen Sie eine formatierte Textdauer nur in Englisch oder auch in einer anderen Sprache (zB "1 Stunde und 20 Minuten")? Wenn andere Sprachen wichtig sind, empfehle ich eine zusätzliche 3rd-Party-Bibliothek zu verwenden. Java-8 enthält keine integrierte Dauerformatierung, siehe auch die richtige Antwort von @Erlandsson, die ausreicht, wenn Sie nur ein numerisches Formular benötigen. –

+0

In Wahrheit brauche ich nur 20 für 20 Minuten, oder 1:20 für 1 Stunde und 20 Minuten ... nichts mit Lokalisierung zu tun, nur eine lesbare Form ... –

Antwort

5

Leider gibt es keine elegante builtin Weg, um eine Duration in Java zu formatieren 8. Der beste, den ich gefunden habe, ist die Methode bobince beschreibt in this Antwort zu verwenden:

Duration duration = Duration.ofHours(1).plusMinutes(20); 
    long s = duration.getSeconds(); 
    System.out.println(String.format("%d:%02d:%02d", s/3600, (s%3600)/60, (s%60))); 

Welche druckt:

1:20:00

Der Code wird müssen abgestimmt werden, wenn Sie längere Zeiten benötigen.

Ich bin nicht sicher, was Sie meinen, dass Sie eine convert Methode fehlt, aber Duration ist gut geeignet für das Hinzufügen/Subtraktion auf LocalTime. Die Methoden LocalTime.plus() und LocalTime.minus() akzeptieren als Argument.

+0

Danke ... Ich benutze genau Dauer nur, um die Dauer eines Ereignisses darzustellen (wenn also die LocalTime 9:00 Uhr ist und die Dauer 30 Minuten beträgt, kann ich verwenden, was Sie geschrieben haben, um eine weitere LocalTime als Summe zu erhalten: 9:30). Wenn ich von etwas wie einer "convert()" Methode spreche, beziehe ich mich nur auf das Fehlen einer Methode, um das Duration-Objekt in einer String-Repräsentation zu konvertieren (das ist wieder das Thema der Frage ... es ist nur eine Wiederholung) . Apropos...es ist sehr seltsam, keine taglib oder etwas anderes zu haben, was ich für Duration benötige, aber LocalTime führt dies einfach durch seine toString() –

+0

Am Ende habe ich beschlossen, eine andere get-Methode in meiner Bean zu erstellen Ich benutze '$ {item.myDurationStr}' anstelle von '$ {item.myDuration}', und es wird das Format "konvertieren", mit einem Code wie 'public String getMyDurationStr() {' ' lang sec = myDuration.getSeconds(); ' ' return String.format ("% 02d:% 02d", sek/3600, (sec% 3600)/60); // Ich brauche nicht für Sekunden " '} ' –

Verwandte Themen