Как я могу конвертировать из григорианского календаря в 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()


календарь.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 и больше.