150 votes

"jolie impression" durée en java

Est-ce que quelqu'un connaît une librairie java qui peut très bien imprimer un nombre en millisecondes de la même manière que c #?

Par exemple, 123456 ms en tant que long serait imprimé comme 4d1h3m5s

(Peut-être pas juste, mais vous voyez ce que je veux en venir !!)

-ace

94voto

Rob Hruska Points 39151

Joda Time a un très bon moyen de faire cela en utilisant un PeriodFormatterBuilder .

Victoire rapide: PeriodFormat.getDefault().print(duration.toPeriod());

par exemple

 //import org.joda.time.format.PeriodFormatter;
//import org.joda.time.format.PeriodFormatterBuilder;
//import org.joda.time.Duration;

Duration duration = new Duration(123456); // in milliseconds
PeriodFormatter formatter = new PeriodFormatterBuilder()
     .appendDays()
     .appendSuffix("d")
     .appendHours()
     .appendSuffix("h")
     .appendMinutes()
     .appendSuffix("m")
     .appendSeconds()
     .appendSuffix("s")
     .toFormatter();
String formatted = formatter.print(duration.toPeriod());
System.out.println(formatted);
 

10voto

skaffman Points 197885

JodaTime a un Period classe qui peut représenter de telles quantités, et peut être rendu (via IsoPeriodFormat) dans ISO8601 format, par exemple, PT4D1H3M5S, par exemple

Period period = new Period(millis);
String formatted = ISOPeriodFormat.standard().print(period);

Si ce format n'est pas celui que vous voulez, alors PeriodFormatterBuilder vous permet d'assembler arbitraire mises en page, y compris votre C#-style 4d1h3m5s.

10voto

user678573 Points 31

Voici comment vous pouvez le faire en utilisant du code JDK pur:

 import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.Duration;

long diffTime = 215081000L;
Duration duration = DatatypeFactory.newInstance().newDuration(diffTime);

System.out.printf("%02d:%02d:%02d", duration.getDays() * 24 + duration.getHours(), duration.getMinutes(), duration.getSeconds()); 
 

9voto

Konrad Höffner Points 1101

Avec Java 8, vous pouvez également utiliser java.time.Duration.toString () pour le formater sans bibliothèques externes utilisant une représentation basée sur ISO-8601 secondes, telle que PT8H6M12.345S. Voir http://docs.oracle.com/javase/8/docs/api/java/time/Duration.html .

2voto

Nick Points 1551

Je me rends compte que cela pourrait ne pas convenir à votre cas d'utilisation, mais PrettyTime pourrait être utile ici.

 PrettyTime p = new PrettyTime();
System.out.println(p.format(new Date()));
//prints: "right now"

System.out.println(p.format(new Date(1000*60*10)));
//prints: "10 minutes from now"
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X