java.time
ZonedDateTime.now(
ZoneId.of("Asia/Kolkata")
)
Детали
Метод Date
toString
применяется смешения Текущий часовой пояс JVM по умолчанию при создании строки. Это заставляет вас думать, что у него есть назначенный часовой пояс, но он не делает. Объект Date
фактически представляет значение в формате UTC. Одна из многих причин избежать этих трудных старых устаревших классов времени.
Этот класс теперь вытесняется классами java.time.
Мгновенный класс представляет собой момент в UTC.
Instant instant = Instant.now();
Настройте в ваш желаемый часовой пояс. Никогда не используйте аббревиатуры 3-4 букв, такие как IST
. Не настоящий часовой пояс. Используйте real time zone names.
ZoneId z = ZoneId.of("Asia/Kolkata");
ZonedDateTime zdt = instant.atZone(z);
Этот вопрос действительно является дубликатом многих других. Поиск переполнения стека для более широких обсуждений и примеров.
Не изменяйте часовой пояс вашей операционной системы хоста или часовой пояс JVM по умолчанию. Вам просто не следует полагаться на часовой пояс по умолчанию, поскольку он может быть изменен в любой момент во время выполнения любым кодом в любом потоке любого приложения в вашей JVM. Всегда указывайте необязательный аргумент для часового пояса при вызове классов java.time, проблема решена.
^Чтобы сделать вещи еще более запутанной, есть на самом деле временная зона в пределах Date
класса, но без добытчиками и сеттеров. Используется внутри, но не относится к нашей дискуссии здесь. Эти старые устаревшие классы времени - очень запутывающий беспорядок.
Как вы определяете часовой пояс? 'Date' не имеет метода getTimeZone (и' getTimeZoneOffset() 'устарел). –
Я хотел бы знать, если я попытаюсь запустить небольшую программу, где я просто печатаю новую дату(), она показывает время в UTC, хотя My Instance настроен на IST. Что делать, чтобы мой объект даты давал время в IST без добавления дополнительного java-кода? Почему новая дата() не дает время в IST, основанном в часовом поясе, установленном в примере? –
Думаю, вам нужно добавить еще код. Теперь вы можете рассмотреть возможность удаления устаревшего класса 'Date' и вместо этого использовать [Java 8 Data & Time API] (https://docs.oracle.com/javase/tutorial/datetime/) ([docs here ] (https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html)) –