Неправильные часы, когда Преобразование даты без времени в Миллисекунды с использованием SimpleDateFormat - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь преобразовать дату в миллисекунды без отметки времени.

   final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
   TimeZone timeZone = TimeZone.getTimeZone("Asia/Kolkata");
   sdf.setTimeZone(timeZone);
   Date dateObj = sdf.parse(date);
   System.out.println ("Milliseconds ="+ dateObj.getTime()) ;

ВХОД: 2019-05-08

ВЫХОД: Milliseconds = 1557253800000 // is 2019-05-08T12:00:00 not 2019-05-08T00:00:00

Я хочу преобразовать "2019-05-08" в миллисекунды 2019-05-08T00:00:00? Любое решение для этого.

1 Ответ

3 голосов
/ 10 мая 2019

1557253800000 соответствует 2019-05-07T18:30:00Z. Поскольку часовой пояс Азия / Калькутта на 5:30 часов опережает UTC, это соответствует 2019-05-08T00:00:00+0530. То есть ваш код работает как положено.

Как упоминалось @Lino в комментариях к Java 8, вместо java.util.Date следует использовать новые классы java.time. Это будет соответствующий код, использующий новый java.time API:

String str = "2019-05-08";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(str, formatter);

ZonedDateTime zonedDateTime = date.atStartOfDay(ZoneId.of("Asia/Kolkata"));
System.out.println(zonedDateTime.toInstant().toEpochMilli()); // will output 1557253800000

zonedDateTime = date.atStartOfDay(ZoneId.of("UTC"));
System.out.println(zonedDateTime.toInstant().toEpochMilli()); // will output 1557273600000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...