У меня есть поток значений даты, которые приходят ко мне в числовом формате, который я предполагаю, что это юлианский формат (не уверен в этом). Мне нужно сравнить эти даты с моей собственной датой, поэтому мне нужно преобразовать «мою» дату в этот числовой формат. Я не могу сделать наоборот из-за проблем с производительностью.
Пример. Моя дата si в «классическом» формате:
"Wed Jan 21 10:21:57 CET 2015"
Мне нужно преобразовать его в этот числовой формат (это Джулиан?):
"1421832117"
Как? Обратите внимание: в юлианской дате мне нужна информация о времени, а не только дата!
Большое спасибо.
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
Счетчик секунд с 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[Европа/Париж]
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
Date
. Откуда взялась «моя» дата? Это действительно строка или это просто результат вызоваtoString()
дляDate
?