Как я могу конвертировать из григорианского календаря в Unix время, в Java?
Мне нужен метод преобразования объекта GregorianCalendar в Unix Time (т. е. длинный). Также нужен метод для преобразования времени Unix (long) обратно в объект GregorianCalendar. Существуют ли какие-либо методы, которые делают это? Если нет, то как я могу это сделать? Любая помощь будет высоко оценена.
ссылка на класс GregorianCalendar -- > http://download.oracle.com/javase/1.4.2/docs/api/java/util/GregorianCalendar.html
спасибо.
5 ответов
методы getTimeInMillis()
и setTimeInMillis(long)
позволит вам получить и установить время в миллисекундах, которое является временем unix, умноженным на 1000. Вам придется настроить вручную, так как время unix не включает миллисекунды - только секунды.
long unixTime = gregCal.getTimeInMillis() / 1000; gregCal.setTimeInMillis(unixTime * 1000);
в сторону: если вы часто используете даты в своем приложении, особенно если вы конвертируете даты или используете несколько часовых поясов, я настоятельно рекомендую использовать JodaTime библиотека. Это очень полный и довольно немного более естественно понять, чем система календаря, которая поставляется с Java.
Я считаю, что gregoriancalendar значение.getTimeInMillis() и gregoriancalendar значение.SetTimeInMillis () позволит вам получить и установить значения, как вы хотите.
Проверьте функции setTimeInMillis и getTimeInMillis: http://download.oracle.com/javase/6/docs/api/java/util/Calendar.html#getTimeInMillis()
tl; dr
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.время классы, встроенные в Java 8 и Java 9.
Итак, вот как конвертировать и использовать современные классы вместо вашей проблемы.
java.время
преобразовать из устаревшего класса GregorianCalendar
к современному классу ZonedDateTime
. Вызовите новые методы, добавленные к старым классам.
ZonedDateTime zdt = myGregCal.toZonedDateTime() ;
и в другую сторону...
GregorianCalendar myGregCal = GregorianCalendar.from( zdt ) ;
если "Unix время" вы имели в виду отсчет целых секунд с момента ссылка эпоху первого момента 1970 в UTC, 1970-01-01T00:00: 00Z, затем позвоните toEpochSecond
.
long secondsSinceEpoch = zdt.toEpochSecond() ;
если вы имели в виду количество миллисекунд с 1970 года началось в UTC, а затем извлечь Instant
. The Instant
класс представляет момент на временной шкале в UTC с разрешением наносекунд (до девяти (9) цифр десятичной дробью).
Instant instant = zdt.toInstant() ;
теперь попросите счет миллисекунд.
long millisecondsSinceEpoch = instant.toEpochMill() ;
имейте в виду, что просить целые секунды или МС может привести к потере данных. The ZonedDateTime
и Instant
оба разрешаются до наносекунд. Так любой микросекунд или наносекунды, которые могут присутствовать, будут игнорироваться при подсчете целых секунд или миллисекунд.
о java.время
на java.время framework встроен в Java 8 и более поздние версии. Эти классы вытесняют беспокойных старых наследие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
на Joda Времени, теперь режим обслуживания, советует миграцию в java.время классы.
чтобы узнать больше, см. В Oracle Учебник. И search Stack Overflow для многих примеров и объяснений. Спецификация в JSR 310.
С помощью драйвер JDBC соответствуют JDBC 4.2 или позже вы можете обменять java.время объекты непосредственно с вашей базой данных. Нет необходимости в строках или java.язык SQL.* учебные занятия.
где получить java.время занятий?
-
Java SE 8, Java SE 9, и позже
- встроенный.
- часть стандартного API Java со встроенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
-
Java SE 6 и Java SE 7
- большая часть java.функциональность времени обратно портирована на Java 6 & 7 в ThreeTen-Backport.
-
Android
- более поздние версии Android bundle реализации java.классы время.
- для более раннего Android,ThreeTenABP проект приспосабливается ThreeTen-Backport (упоминалось выше). См.как использовать ThreeTenABP....
на ThreeTen-Extra проект расширяет java.время с дополнительными занятиями. Этот проект является испытательной площадкой для возможных будущих дополнений к java.время. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и больше.