Ответ Джона Скита правильный, но теперь он устарел с появлением кода java.time в Java 8 и более поздних версиях.
java.time
Класс Instant
представляет момент на временной шкале в UTC с разрешением наносекунд (до девяти (9) цифрдесятичная дробь).
Получить текущий момент в UTC.
Instant instant = Instant.now();
Настройка на часовой пояс.
Указать правильное имя часового пояса в формате continent/region
, например America/Montreal
, Africa/Casablanca
или Pacific/Auckland
.Никогда не используйте 3-4-буквенное сокращение, например EST
или IST
, так как они не истинных часовых поясов, не стандартизированы и даже не уникальны (!).
ZoneId z = ZoneId.of( "America/Los_Angeles" );
ZonedDateTime zdt = instant.atZone( z );
Чтобы создать строку в стандартном формате ISO 8601 , вызовите toString
.Для альтернативного форматирования используйте класс DateTimeFormatter
, уже описанный во многих других Вопросах и ответах.
String output = zdt.format( myDateTimeFormatter );
См. Тот же момент в Индийском времени , в частности Asia/Kolkata
.
ZoneId zKolkata = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zdtKolkata = zdt.withZoneSameInstant( zKolkata );
Я не уверен, что под IST
Вы имели в виду стандартное время Индии или ирландское стандартное время.Давайте рассмотрим Europe/Dublin
.В этой зоне в настоящее время используется нулевое смещение +00:00
.Так что время настенных часов совпадает с UTC.
ZoneId zDublin = ZoneId.of( "Europe/Dublin" );
ZonedDateTime zdtDublin = zdt.withZoneSameInstant( zDublin );
См. Этот код, запущенный на IdeOne.com .
instant.toString (): 2017-02-13T07: 28: 57,738Z
zdt.toString (): 2017-02-12T23: 28: 57,738-08: 00 [America / Los_Angeles]
zdtKolkata.toString (): 2017-02-13T12: 58: 57.738 + 05: 30 [Азия / Калькутта]
zdtDublin.toString (): 2017-02-13T07: 28: 57.738Z[Европа / Дублин]
О java.time
Инфраструктура java.time встроена в Java 8 и более поздние версии.Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .
Где получить классы java.time?
- Java SE 8 и SE 9 и более поздних версий
- Встроенный,
- Часть стандартного Java API с встроенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и SE 7
- Android
Проект ThreeTen-Extra расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more .