tl; dr
Instant.ofEpochMilli( 1_322_018_752_992L )
.atZone( ZoneId.of( "Africa/Tunis" ) )
Детали
В других ответах используются устаревшие или неправильные классы.
Избегайте старых классов даты и времени, таких как java.util.Date/.Calendar. Они оказались плохо спроектированными, запутанными и неудобными.
java.time
Java.time рамки поставляется встроенный в Java 8 и более поздних версий. Большая часть функциональности перенесена на Java 6 и 7 и в дальнейшем адаптирована для Android . Сделано теми же людьми, что и Joda-Time .
An Instant
- это момент на временной шкале в формате UTC с разрешением наносекунды . Его эпоха - первый момент 1970 года по всемирному координированному времени.
Предполагая, что ваши входные данные представляют собой количество миллисекунд с 1970-01-01T00: 00: 00Z (не ясно в вопросе), тогда мы можем легко создать экземпляр файла Instant
.
Instant instant = Instant.ofEpochMilli( 1_322_018_752_992L );
Instant.toString (): 2011-11-23T03: 25: 52.992Z
Z
В этом стандарте ISO 8601 отформатированной строки является аббревиатурой Zulu
и означает UTC .
Примените часовой пояс, используя правильное имя часового пояса , чтобы получить расширение ZonedDateTime
.
ZoneId zoneId = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = instant.atZone( zoneId );
Посмотрите, как этот код запускается вживую на IdeOne.com .
Asia/Kolkata
часовой пояс ?
Я предполагаю, что у вас есть часовой пояс Индии, влияющий на ваш код. Здесь мы видим, что при настройке на Asia/Kolkata
часовой пояс отображается то же время суток, что и в сообщении, 08:55
что на пять с половиной часов опережает наше значение UTC 03:25
.
2011-11-23T08: 55: 52.992 + 05: 30 [Азия / Калькутта]
Зона по умолчанию
Вы можете применить текущий часовой пояс JVM по умолчанию . Помните, что значение по умолчанию может измениться в любой момент во время выполнения . Любой код в любом потоке любого приложения в JVM может изменить текущее значение по умолчанию. Если важно, спросите у пользователя желаемый / ожидаемый часовой пояс.
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
О java.time
Java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытеснять неприятные старые устаревшие классы даты и времени , такие как java.util.Date
, Calendar
, и SimpleDateFormat
.
Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поищите в Stack Overflow множество примеров и объяснений. Спецификация - JSR 310 .
С драйвером JDBC , совместимым с JDBC 4.2 или новее, вы можете обмениваться объектами java.time напрямую с вашей базой данных. Нет необходимости в строках или классах java.sql. *.
Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является испытательной площадкой для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как Interval
, YearWeek
, YearQuarter
, и более .