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