Короткий ответ:
LocalDate date = LocalDate.now();
long modifiedJulianDay = date.getLong(JulianFields.MODIFIED_JULIAN_DAY);
Объяснение:
Wikipedia статья дает лучшее описание юлианского дня в качестве концепции. Проще говоря, это простое, непрерывное количество дней с некоторой эпохи, где выбранная эпоха дает вариации свое название. Таким образом, Модифицированный Юлианский День насчитывает 1858-11-17.
Объекты даты и времени JSR-310 реализуют интерфейс TemporalAccessor
, который определяет методы get(TemporalField)
и getLong(TemporalField)
. Они позволяют запрашивать объект даты/времени для определенного поля времени. Четыре реализации поля предоставляются предлагая Julian варианты день:
Эти поля могут использоваться только с getLong(TemporalField)
, потому что они возвращают число, которое слишком велико для int
. Если вы звоните now.get(JulianFields.MODIFIED_JULIAN_DAY)
тогда будет сгенерировано исключение: «UnsupportedTemporalTypeException: метод Недопустимое поле ModifiedJulianDay для ГЭТ(), используйте getLong() вместо»
Заметьте, что JSR-310 может обеспечить только целые числа от TemporalField
, таким образом, с временем день не может быть представлен, и все цифры основаны на полуночи. В расчетах также используется локальная полуночи, а не UTC, которые следует учитывать.
поля также могут быть использованы для обновления даты/времени объекта с использованием метода на Temporal
:
result = input.with(JulianFields.MODIFIED_JULIAN_DAY, 56685);
Знаете ли вы, как преобразовать это наоборот? От измененной даты Julian до LocalDate? – Keros
LocalDate date = LocalDate.MIN.with (JulianFields.MODIFIED_JULIAN_DAY, 56685); – JodaStephen