Отметка времени Java с дробными секундами - PullRequest
1 голос
/ 25 мая 2019

Как я могу напечатать Java Instant как метку времени с долями секунды, например, 1558766955.037?Необходимая точность равна 1/1000, как показано в примере.

Я пробовал (double) timestamp.getEpochSecond() + (double) timestamp.getNano() / 1000_000_000, но когда я конвертирую его в строку и печатаю, он показывает 1.558766955037E9.

Ответы [ 3 ]

1 голос
/ 25 мая 2019

Результат, который вы видите, является научным (электронным) обозначением результата, который вы хотели получить. Другими словами, у вас есть правильный результат, вам просто нужно правильно отформатировать его при печати:

Instant timestamp = Instant.now();
double d = (double) timestamp.getEpochSecond() + (double) timestamp.getNano() / 1000_000_000;
System.out.printf("%.2f", d);
1 голос
/ 25 мая 2019

Как отмечали другие, это проблема форматирования.Для вашего конкретного формата вы можете использовать Formatter с Locale, который поддерживает разделенные точками дроби:

Instant now = Instant.now();

double val = (double) now.getEpochSecond() + (double) now.getNano() / 1000_000_000;

String value = new Formatter(Locale.US)
                .format("%.3f", val)
                .toString();

System.out.print(value);

Печать:

1558768149.514
0 голосов
/ 25 мая 2019

System.out.printf("%.3f", instant.toEpochMilli() / 1000.0) должно работать.

...