Как получить экземпляр Date со временем дня в определенное время (например, 12: 00: 00.000) в указанном c часовом поясе? - PullRequest
0 голосов
/ 16 марта 2020

например, сейчас во Вьетнаме 2020-03-16 11: 23: 23.121, но моя программа работает в США, как получить экземпляр Date, который будет 2020-03-16 12: 00: 00.000 в Вьетнам, что означает, что я оставляю год, месяц, день одинаковыми, но для часа устанавливаю значение 12, минуты, секунды и наносекунды равными 0, может ли LocalDateTime играть роль?

Ответы [ 3 ]

3 голосов
/ 16 марта 2020
ZonedDateTime zdt = ZonedDateTime.of(2020, 3, 16, 12, 0, 0, 0, ZoneId.of("Asia/Ho_Chi_Minh"));
2 голосов
/ 16 марта 2020

ZonedDateTime

Из java -8 вы можете использовать ZonedDateTime , чтобы получить дату и время из любой зоны

ZonedDateTime dateTime = ZonedDateTime.now(ZoneId.of("Asia/Ho_Chi_Minh"))

И вы можете изменить время до 12:00:00 с использованием с использованием метода . Передайте время суток как LocalTime объект, полученный путем вызова LocalTime.of. В новом объекте LocalTime секунда и наносекунда по умолчанию равны нулю, поэтому нет необходимости передавать эти аргументы фабричному методу.

dateTime.with( LocalTime.of( 12 , 0 ) )  //2020-03-16T12:00+07:00[Asia/Ho_Chi_Minh]

Java util Date не будет хранить информацию о часовом поясе, а просто представляет определенный c момент времени (который является только UT C), с точность в миллисекундах. Я предлагаю не использовать наследство util.Date

0 голосов
/ 16 марта 2020

Нет, не использовать LocalDateTime здесь

Может ли LocalDateTime играть роль?

LocalDateTime не может представлять момент, так как в нем отсутствует контекст часовой пояс или смещение от UT C. Так что это именно то, что неправильно класс, чтобы использовать здесь в вашем Вопросе.

Чтобы представить момент, определенную c точку на временной шкале, используйте:

  • Instant (всегда в UT C)
  • OffsetDateTime (содержит смещение от UT C, количество часов-минут-секунд)
  • ZonedDateTime (содержит назначенный часовой пояс, названный в Continent/Region)

См. Правильный Ответ Deadpool , показывающий правильное использование ZonedDateTime для решения вашей проблемы.

Подробнее см. В чем разница между Instant и LocalDateTime?

...