Мне нужно получить сегодняшнее полночное время в миллисекундах. Например, сегодняшняя дата 2020-03-20, и я конвертирую сегодняшнюю полночь в миллисекунды, используя приведенный ниже код. Если он работает нормально в моей локальной среде, но проблема в том, что когда я развертываю этот код на сервере, сервер имеет часовой пояс UT C, поэтому даже если я пропущу часовой пояс, возвращенные миллисекунды будут неправильными. После отладки я обнаружил, что это происходит из-за разбора даты, дата использует часовой пояс по умолчанию. Я попытался установить часовой пояс в дате, но возвращаемое значение в миллисекундах неверно, даже если дата - 2020/03/20 00:00:00. Ниже приведены некоторые примеры.
В локальной среде: Часовой пояс перейдите к методу = "Asia / Colombo"
Дата в миллисекундах = 1584642600000
Дата преобразования = пт 20 марта 2020 г. 00: 00: 00
В среде сервера: часовой пояс перейти к методу = "Asia / Colombo"
Дата в миллисекундах = 1584662400000
Конвертированная дата = Пт 20 марта 2020 05: 30: 00
Обратите внимание, что здесь часовой пояс - это значение, которое я передаю параметру моего метода. Я использую java 8.
private static final String DATE_FORMAT = "yyyy/MM/dd 00:00:00";
private long getTMT(String timeZone) {
try {
ZoneId zoneId = ZoneId.of(timeZone);
ZonedDateTime currentZone = ZonedDateTime.now(zoneId);
ZonedDateTime zonedDateTime =
currentZone.withZoneSameInstant(zoneId);
DateTimeFormatter format =
DateTimeFormatter.ofPattern(DATE_FORMAT);
String formattedDateTime = zonedDateTime.format(format);
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
Date date = sdf.parse(formattedDateTime);
return date.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
}
Надеюсь, я четко объяснил свой вопрос, пожалуйста, дайте мне знать ваши ответы / комментарии по этому вопросу.
Спасибо.