Я пытаюсь отформатировать Instant в строку, используя новый Java-API time 8 и шаблон:
Instant instant = ...;
String out = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(instant);
Используя приведенный выше код, я получаю исключение, которое жалуется на неподдерживаемое поле:
java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: YearOfEra
at java.time.Instant.getLong(Instant.java:608)
at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298)
...
yyyy-MM-dd hh:mm:ss
формат:DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss").withZone(ZoneId.of("Europe/Paris"));
источник
Это избавляет вас от необходимости конвертировать в UTC. Однако временные рамки некоторых других языков могут не поддерживать миллисекунды, поэтому вам следует
источник
Instant
Класс не содержит информации о зоне, он только хранит временные метки в миллисекундах от UNIX эпохи, то есть 1 января 1070 от UTC. Таким образом, средство форматирования не может печатать дату, потому что дата всегда печатается для конкретного часового пояса. Вы должны установить часовой пояс для форматирования, и все будет хорошо, как это:источник
Или, если вы все еще хотите использовать средство форматирования, созданное из шаблона, вы можете просто использовать LocalDateTime вместо Instant:
источник
Инстансы уже в UTC и уже имеют формат даты по умолчанию yyyy-MM-dd . Если вы довольны этим и не хотите связываться с часовыми поясами или форматированием, вы также можете
toString()
это сделать:Не хотите T и Z? (Z указывает, что эта дата - UTC. Z обозначает "Zulu" или "Смещение нулевого часа" или UTC):
Хотите миллисекунды вместо наносекунд? (Так что вы можете добавить его в SQL-запрос):
и т.п.
источник
Я считаю, что это может помочь, вам может понадобиться использовать какое-то изменение локальной даты вместо мгновенного
источник