Как преобразовать дату в юлианский формат в Java?

У меня есть поток значений даты, который приходит ко мне в числовом формате, который, как я полагаю, является юлианским (не уверен). Мне нужно сравнить эти даты с моей собственной датой, поэтому мне нужно преобразовать «мою» дату в этот числовой формат. Я не могу сделать наоборот из-за проблем с производительностью.

Пример. Моя дата в "классическом" формате:

"Wed Jan 21 10:21:57 CET 2015"

Мне нужно преобразовать его в этот числовой формат (это юлианский?):

"1421832117"

Как? Обратите внимание: в юлианской дате мне нужна также информация о времени, а не только дата!

Большое Вам спасибо.


person Geltrude    schedule 29.01.2015    source источник
comment
Возможно, это поможет.   -  person Jens    schedule 29.01.2015
comment
Это не похоже на юлианскую дату, я думаю, это количество секунд, прошедших с эпохи Unix.   -  person Andy Turner    schedule 29.01.2015
comment
В самом деле - это легко получить, когда у вас есть Date объект. Откуда у меня свидание? Это действительно строка или это просто результат вызова toString() на Date?   -  person Jon Skeet    schedule 29.01.2015
comment
Что ж, вы можете использовать библиотеку времени Joda, если вам нужна дополнительная помощь или фрагмент кода, вы можете спросить здесь   -  person Syed Atir Mohiuddin    schedule 29.01.2015


Ответы (2)


Вы можете передать Arg (Input) с указанным форматом даты, и приведенный ниже метод проанализирует его в миллисах (желаемый формат).

private void parseDateTime(String input){
    DateTimeZone CET = DateTimeZone.forID("CET");
    DateTimeFormatter dtf = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss 'CET' yyyy").withZone(CET);
    DateTime parsed = dtf.parseDateTime(input);
    Log.d("Millis for classic","" + parsed.getMillis());
}

ВЫХОД: 01-28 20:40: 56.787: D / Millis для классической версии (22559): 1421832117000

person Syed Atir Mohiuddin    schedule 29.01.2015

Отсчет секунд с 1970 года

Вы, по-видимому, ошибочно приняли отсчет целых секунд с эпохи первого момента времени UTC 1970 года за число дней по юлианскому календарю . Хотя оба значения имеют значение, это целые звери.

Число дней по юлианскому календарю - это количество целых или дробных дней с 1 января 4713 г. до н.э., пролептический юлианский календарь (24 ноября 4714 г. до н.э., в пролептическом григорианском календаре). Число юлианских дней для даты, показанной ниже, 2015-01-21 равно 2457043. Очень отличается от ввода 1421832117, представленного в Вопросе.

java.time

Используя фреймворк java.time, встроенный в Java 8 и более поздних версий, мы можем легко преобразовать ваше количество секунд в объект даты и времени. См. учебник Oracle, чтобы узнать о java.time. Большая часть функций java.time была перенесена на Java 6 и 7 в ThreeTen-Backport и дополнительно адаптирован для Android в ThreeTenABP.

Instant - это момент на шкале времени в UTC с разрешением до наносекунд.

Instant now = Instant.now();

Мы можем легко преобразовать ваше количество секунд с начала 1970 г. по всемирному координированному времени в объект Instant.

long seconds = 1421832117L; // Count of whole seconds since start of 1970 UTC.
Instant instant = Instant.ofEpochSecond ( seconds );

Вы можете просмотреть это по времени настенных часов некоторого часового пояса. Избегайте использования 3-4-буквенных сокращений, таких как CET, поскольку это не настоящие часовые пояса, не стандартизированные и даже не уникальные (!). правильное название часового пояса имеет формат continent/region.

ZoneId zoneId = ZoneId.of ( "Europe/Paris" );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );

Выгрузить в консоль.

System.out.println ( "seconds:" + seconds + " | instant: " + instant + " | zdt: " + zdt );

секунд: 1421832117 | момент: 2015-01-21T09: 21: 57Z | zdt: 2015-01-21T10: 21: 57 + 01: 00 [Европа / Париж]

person Basil Bourque    schedule 09.07.2016