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

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

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

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

"1421832117"

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

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

0
Geltrude 29 Янв 2015 в 14:24
1
Возможно, поможет это.
 – 
Jens
29 Янв 2015 в 14:27
1
Это не похоже на юлианскую дату, я думаю, что это количество секунд с эпохи Unix.
 – 
Andy Turner
29 Янв 2015 в 14:31
В самом деле - что легко получить сразу, у вас есть объект Date. Откуда взялась «моя» дата? Это действительно строка или это просто результат вызова toString() для Date?
 – 
Jon Skeet
29 Янв 2015 в 14:32
Ну, вы можете использовать библиотеку времени Joda, если вам нужна дополнительная помощь или фрагмент, вы можете спросить здесь
 – 
Syed Atir Mohiuddin
29 Янв 2015 в 14:44

2 ответа

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

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

0
Syed Atir Mohiuddin 29 Янв 2015 в 15:06

Счетчик секунд с 1970 г.

Вы, по-видимому, ошибочно приняли отсчет целых секунд с момента первого момента 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[Европа/Париж]

0
Basil Bourque 9 Июл 2016 в 07:51