Вопрос

Мне нужен метод преобразования объекта Gregoriancalendar в Unix Time (то есть долго). Также нужен способ преобразования времени Unix (длинного) обратно в объект Gregoriancalendar. Есть ли какие-либо методы, что это делает? Если нет, то как я могу это сделать? Любая помощь будет высоко ценится.

Ссылка на Gregoriancalendar Class -> http://download.orcle.com/javase/1.4.2/docs/api/java/util/gregoriancalendar.html.

Спасибо.

Это было полезно?

Решение

Методы getTimeInMillis() а также setTimeInMillis(long) Позвольте вам получить и установить время в миллисекундах, что является временем UNIX, умноженного на 1000. Вам придется отрегулировать вручную, поскольку время Unix не включает миллисекунды - всего несколько секунд.

длинное unixtime = gregcal.getTimeinmillis () / 1000; gregcal.settimeinmillis (Unixtime * 1000);

В стороне: Если вы используете даты много в своем приложении, особенно если вы преобразуете даты или используете несколько часовых поясов, я бы очень рекомендовал использовать Jodatime. библиотека. Это очень полное и довольно более естественно, чтобы понять, чем календарная система, которая поставляется с Java.

Другие советы

я полагаю, что Gregoriancalendar.getmyinmillis () а также Gregoriancalendar.settimeinmillis () позволит вам получить и установить длинные значения, как вы хотите.

Проверьте функции SettimeinMillis и GetTimeInmillis: http://download.orcle.com/javase/6/docs/api/java/util/calendar.html#getTimeInmillis.()

Calendar.getTimeInmillis () должен быть то, что вы ищете.

TL; доктор

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 класс представляет собой момент на временной шкале в универсальное глобальное время с разрешением наносекунды (до девяти (9) цифр десятичной фракции).

Instant instant = zdt.toInstant() ;

Сейчас Спросите подсчет миллисекунды.

long millisecondsSinceEpoch = instant.toEpochMill() ;

Имейте в виду, что спрашивая все целые секунды или Миллисекунды может включать потери данных. То ZonedDateTime а также Instant оба решаются на наносекунды. Так что-нибудь микросеконд или NanoSeconds, которые могут быть присутствующими, будут проигнорированы, когда вы считаете все ваши секунды или миллисекунды.


О Java.Time.

То Java.Time. Рамки встроены в Java 8, а затем. Эти классы вытесняют проблему старого наследие Классы даты времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

То Joda-Time Проект, сейчас в Режим технического обслуживания, советует миграцию к Java.Time. классы.

Чтобы узнать больше, см. Учебник Oracle. Отказ И поиск стека переполнения для многих примеров и пояснений. Спецификация JSR 310..

С помощью JDBC драйвер совместимый с JDBC 4.2 или позже вы можете обменять Java.Time. Объекты напрямую с вашей базой данных. Нет необходимости в строках ни java.sql. * Классы.

Где получить классы Java.Time?

  • Java SE 8., Java SE 9., и позже
    • Встроенный.
    • Часть стандартного Java API с подключенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6. а также Java SE 7.
    • Большая часть функциональности Java.Time возвращается в Java 6 & 7 в Threeten-Backport..
  • Андроид

То Threeten-Extra Проект расширяет Java.Time с дополнительными классами. Этот проект является доказательством для возможных будущих дополнений в Java.Time. Вы можете найти несколько полезных классов, таких как Interval, YearWeek, YearQuarter, а также более.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top