ТЛ; др
myGregCal.toZonedDateTime().toEpochSecond() // Convert from troublesome legacy `GregorianCalendar` to modern `ZonedDateTime`.
И идет в другом направлении ...
GregorianCalendar.from( // Convert from modern `ZonedDateTime` to troublesome legacy class `GregorianCalendar`.
Instant.ofEpochSecond( yourCountOfWholeSecondsSinceEpoch ) // Moment in UTC.
.atZone( // Apply `ZoneId` to `Instant` to produce a `ZonedDateTime` object.
ZoneId.of( "Africa/Tunis" )
)
)
Избегайте устаревших классов даты и времени
Другие ответы правильные и короткие. Но, к вашему сведению, проблемные старые классы даты и времени, такие как java.util.Date
, java.util.Calendar
и java.text.SimpleDateFormat
теперь наследие , вытеснены java.time классы, встроенные в Java 8 и Java 9.
Итак, вот как конвертировать и использовать современные классы вместо вашей проблемы.
java.time
Преобразование из унаследованного класса GregorianCalendar
в современный класс ZonedDateTime
. Вызовите новые методы, добавленные к старым классам.
ZonedDateTime zdt = myGregCal.toZonedDateTime() ;
И идет в другом направлении ...
GregorianCalendar myGregCal = GregorianCalendar.from( zdt ) ;
Если под «Unix time» вы подразумевали количество целых секунд с эталонной эпохи первого момента 1970 года в UTC, 1970-01-01T00: 00: 00Z, затем позвоните toEpochSecond
.
long secondsSinceEpoch = zdt.toEpochSecond() ;
Если вы имели в виду подсчет миллисекунд с 1970 года, начатый в UTC, извлеките Instant
. Класс Instant
представляет момент на временной шкале в UTC с разрешением наносекунд (до девяти (9) цифр десятичной дроби).
Instant instant = zdt.toInstant() ;
Теперь запрашивать счет миллисекунд .
long millisecondsSinceEpoch = instant.toEpochMill() ;
Имейте в виду, что запрос целых секунд или миллисекунд может привести к потере данных. ZonedDateTime
и Instant
разрешают до наносекунд. Поэтому любые микросекунды или наносекунды, которые могут присутствовать, будут игнорироваться при подсчете ваших целых секунд или миллисекунд.
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
и & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует выполнить переход на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Используя драйвер JDBC , совместимый с JDBC 4.2 или новее, вы можете напрямую обмениваться объектами java.time с вашей базой данных. Нет необходимости ни в строках, ни в java.sql. * Классах.
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more .