Как получить текущую дату в зоне UTC как длинное значение в Java 8 - PullRequest
1 голос
/ 08 ноября 2019

Как добиться следующего в API времени даты java 8

long currentDate = Date.UTC(date.getYear(), date.getMonth(), date.getDate(), 0, 0, 0);
System.out.println(currentDate);

Вышеприведенный код вернул

1573171200000

Я попробовал следующее

ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneOffset.UTC);
System.out.println(zonedDateTime.toEpochSecond());

возвращено

1573212520

Ответы [ 3 ]

3 голосов
/ 08 ноября 2019

На самом деле оба результата верны, просто вы неправильно понимаете, что происходит:

В первом операторе, где вы используете дату, вы определяете час, мин, сек как 0.

Вместо ZoneDateTime вы используете now(), что даст вам текущее время даты

Чтобы получить то же время, я думаю, вам нужно:

ZonedDateTime zonedDateTime = ZonedDateTime.of(LocalDate.now(),
        LocalTime.of(0,0,0), 
        ZoneOffset.UTC);
 Long zdtm = zonedDateTime.toInstant().toEpochMilli();

Теперь оба подхода возвращаются:

1573171200000
1573171200000

Идеальная демонстрация

3 голосов
/ 08 ноября 2019

Получите LocalDate на сегодня, конвертируйте его в ZonedDateTime в начале дня, затем конвертируйте в Instant и получите миллионы эпох:

LocalDate.now().atStartOfDay(ZoneOffset.UTC).toInstant().toEpochMilli()
0 голосов
/ 08 ноября 2019

Если вам не нужен ZonedDateTime, просто используйте

System.out.println(Instant.now().toEpochMilli());

Редактировать: я неправильно понял, что вам нужны миллионы с начала дня. YCF_L ответ с добавлением Хольгера правильный.

С уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...