web-dev-qa-db-fra.com

Conversion correcte d'une heure en millisecondes dans Java.time (Java 8)

J'ai essayé de convertir un "DateTime" en millisecondes à l'aide du package Java.time intégré à Java 8. 

Mais je n'ai pas été capable de le faire correctement. J'essaie de convertir "29/Jan/2015: 18: 00: 00" en millisecondes. Ce qui suit est quelque chose que j'ai essayé

Instant instant = Instant.parse("2015-01-29T18:00:00.0z");
Long instantMilliSeconds = Long.parseLong(instant.getEpochSecond() + "" + instant.get(ChronoField.MILLI_OF_SECOND));
System.out.println(new Date(instantMilliSeconds)); // prints Sun Jun 14 05:06:00 PDT 1970

J'ai essayé d'utiliser LocalDateTime, mais je n'ai pas trouvé le moyen d'effectuer efficacement la conversion en millisecondes. Je ne dis pas que c'est la meilleure façon de le faire, si vous connaissez quelque chose de mieux, j'apprécierais vraiment quelques indications 

13
Seagull

Vous devriez utiliser Instant::toEpochMilli .


System.out.println(instant.toEpochMilli());
System.out.println(instant.getEpochSecond());
System.out.println(instant.get(ChronoField.MILLI_OF_SECOND));

empreintes

1422554400000
1422554400
0

Votre version n'a pas fonctionné car vous avez oublié de compléter instant.get(ChronoField.MILLI_OF_SECOND) avec des zéros supplémentaires pour la compléter à 3 endroits.

21
Jeffrey

De Cours de date et heure les tutoriels ...

DateTimeFormatter formatter
                    = DateTimeFormatter.ofPattern("dd/MMM/yyyy:HH:mm:ss");
LocalDateTime date = LocalDateTime.parse("29/Jan/2015:18:00:00", formatter);
System.out.printf("%s%n", date);

Imprime 2015-01-29T18:00

ZoneId id = ZoneId.systemDefault();
ZonedDateTime zdt = ZonedDateTime.of(date, id);
System.out.println(zdt.toInstant().toEpochMilli());

Imprime 1422514800000

2
MadProgrammer

D'accord, je pense avoir enfin trouvé un moyen facile de faire ce que j'essaie de faire

LocalDateTime localDateTime = LocalDateTime.parse(date, DateTimeFormatter.ofPattern("dd/MMM/uuuu:H:m:s"));
System.out.println(localDateTime.toInstant(ZoneOffset.UTC).toEpochMilli());

Impressions 1390903200000

0
Seagull