Как я могу преобразовать из Gregorian Calendar в Unix Time, в Java?
-
26-09-2019 - |
Вопрос
Мне нужен метод преобразования объекта 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..
- Андроид
- Последние версии Android Bundle Aflations Java.Time классов.
- Для ранее Android, Threetenabp. Адапты проекта Threeten-Backport. (упомянутый выше). Видеть Как использовать THRETENABP ....
То Threeten-Extra Проект расширяет Java.Time с дополнительными классами. Этот проект является доказательством для возможных будущих дополнений в Java.Time. Вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
, а также более.