@Joachim Негативной стороной этого «стандартного» подхода является то, что "yyyy-MM-dd'T'HH:mmZ"в моем приложении должно быть много экземпляров , каждый раз, когда мне нужна дата в формате ISO-8601. С JodaTime, как я вижу, я могу использовать предопределенный форматер ISODateTimeFormat, который выполняет эту работу для меня ..
yegor256
8
@Joachim, Zдействует шаблон в SimpleDateFormat, а сделать это: yyyy-MM-dd'T'HH:mm'Z'.
Бухаке Синди
33
-1 Это дает вам дату / время в текущем часовом поясе - не UTC. Ответ Карлоса включает в себя необходимый код UTC.
Скотт Риппи
16
Я только что исправил ошибку часового пояса - так как это принятый ответ, я думаю, что это было правильно.
SimpleDateFormatЭкземпляр может быть объявлена как глобальная константа , если это необходимо часто, но нужно учитывать , что этот класс не является потокобезопасным. Он должен быть синхронизирован при одновременном доступе нескольких потоков.
РЕДАКТИРОВАТЬ: Я бы предпочел Joda Time, если делать много разных манипуляций с временем / датой ...
РЕДАКТИРОВАТЬ2: исправлено: setTimeZoneне принимает строку (исправлено Полом)
Этот формат не является константой в какой-либо встроенной библиотеке?
Даниэль Каплан
Для «DateFormat» есть два разных пакета, не забывайте использовать «import java.text.DateFormat»
oabarca
3
Если вы хотите текущий часовой пояс, используйте TimeZone tz = TimeZone.getDefault (); вместо этого
oabarca
Вы не должны цитировать 'Z' в формате, поскольку это делает его логически несущественным. Если TimeZone является UTC, как в приведенном выше примере, то Z без кавычек будет приводить только к Z в выходных данных ... однако, если TimeZone не UTC, тогда Z все равно будет выводиться как буквальное значение UTC, когда время не может быть. Если потребляющая система считывает Z как UTC, но не время, время будет смещено. И наоборот, если синтаксический анализатор использует заключенную в кавычки Z без установки TimeZone, он будет анализировать время UTC как местное время (снова сдвиг). Эта цитата не нужна, если установлен TZ, но опасна, если это не так.
Мэтт Уиппл
@MattWhipple - но если вы используете Z без кавычек, результат будет примерно таким 2016-06-14T13:56+0000- вопрос задает что-то вроде2016-06-14T13:56Z
user85421
184
Java 8 Native
java.time упрощает работу с Java 8. И потокобезопасен.
Вы можете испытать желание использовать более легкие, Temporalтакие как Instantили LocalDateTime, но им не хватает поддержки форматера или данных часового пояса. Только ZonedDateTimeработает из коробки.
Уточненные требования, такие как удаление части секунд, должны по-прежнему удовлетворяться пользовательскими форматами или пользовательской последующей обработкой.
Для Java 6 и 7 вы можете рассмотреть back-порты java.time, такие как ThreeTen-Backport , который также имеет порт Android . Оба легче, чем Йода, и извлекли уроки из опыта Йоды - особенно. учитывая, что java.time разработан автором Йоды.
Хороший ответ. Обратите внимание на полезную привычку явно указывать часовой пояс, а не неявно полагаться на текущий часовой пояс JVM по умолчанию. При желании вы можете указать конкретный часовой пояс , например ZoneId.of( "America/Montreal" ).
Василий Бурк
1
Instant позволяет форматировать его в формате ISO 8601, просто вызвав метод .toString ():return DateTimeFormatter.ISO_INSTANT.format(this);
VadymVL
Это лучше, потому что вы избегаете по умолчанию.
Кристоф Русси
6
Предупреждение: решение для Java 8, использующее ISO_INSTANT, имеет раздражающую причуду. Когда миллисекунды равны 0, они не включаются в вывод. Это разрешено в соответствии со стандартом ISO 8601, но многие библиотеки и парсеры на других языках не так уж просты. Если необходимо всегда включать нули, используйте это вместо этого: DateTimeFormatter ISO_8601 = ofPattern ("гггг-ММ-дд'Т'ХХ: мм: сс.SSSX"). WithZone (UTC);
Юрген
После переключения с Java 8 на 11 я вижу DateTimeFormatter.ISO_INSTANTи DateTimeFormatter.ISO_DATE_TIMEиспользую 6 цифр за секунды, а не 3, которые больше не воспринимаются Spring @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME).
Ну, либо вы добавляете дополнительную стороннюю библиотеку в качестве зависимости от вашего проекта (которую вы, возможно, захотите обновлять, и поставляете вместе с вашим приложением, эй, это просто дополнительные 3,2 мегабайта) и делаете DateTime dt = new DateTime(); DateTimeFormatter fmt = ISODateTimeFormat.dateTime(); String str = fmt.print(dt);, либо вы инкапсулируете return String.format("%tFT%<tRZ", new Date());в класс, и делайте str = Iso8601Time.now(), где когда-либо вам это нужно. (Это не значит, что формат ISO изменится.) Если окажется, что вам нужно больше, чем просто текущая дата в формате ISO, используйте lib.
aioobe
2
Полностью с этим согласен.
yegor256
3
Обратите внимание, что можно изменить ответ, помеченный как принятый ;-)
aioobe
8
%tFT%<tTZбудет включать секунды; %tFT%<tTZ.%<tLбудет включать в себя миллисекунды.
Патрик Лински
2
Очень аккуратное решение, должно быть уже принятым ответом :)
Это правильный ответ, и это скандал, что за все это выдумано не было SimpleDateFormats.
Дэвид Моулз
Рад, что прочитал больше ответов. Я согласен, это должен быть ответ сейчас.
Ксан-Кун Кларк-Дэвис
И потому toString, что во многих случаях вам даже не нужно вызывать это явно.
kaya3
1
Предупреждение в комментарии к предыдущему ответу применимо и здесь: «Предупреждение: решение для Java 8, использующее ISO_INSTANT, имеет раздражающую причуду. Когда миллисекунды равны 0, они не включаются в вывод. Это разрешено в соответствии с ISO 8601 стандартные, но многие библиотеки и парсеры на других языках не так уж просты. "
Если вы не хотите добавлять или не видите значения добавления выше библиотеки, вы можете просто использовать встроенный SimpleDateFormatкласс для форматирования даты в требуемый формат ISO
И как бы вы создали строку в формате, как показано в вопросе?
Иоахим Зауэр
4
Я бы сказал, не добавляйте библиотечную зависимость для чего-то такого простого (как это можно сделать с помощью двух строк java-кода). (Конечно, если требования растут, это другая история.)
aioobe
1
@aioobe, если он используется только в нескольких частях приложения, то по умолчанию можно перейти по умолчанию, в остальных случаях лучше использовать jodatime.
Джигар Джоши
5
@aioobe jodatime лучше в любом случае, потому что у него есть ISODateTimeFormat- предопределенный форматер ISO-8601.
yegor256
3
@ org.life.java: которые актуальны только тогда, когда вы можете правильно переключиться на время Джоде. У вас их не будет, когда вы используете только эту функцию времени Joda.
Иоахим Зауэр
20
DateFormatUtils из Apache commons-lang3имеют полезные константы, например:DateFormatUtils.ISO_DATETIME_FORMAT
Более точно, на текущий момент в UTC: DateFormatUtils.format(new Date(), "yyyy-MM-dd'T'HH:mm'Z'", TimeZone.getTimeZone("UTC"));текущий момент по умолчанию в часовом поясе: DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(new Date()); @ yegor256 спасибо за упоминание DateFormatUtils, имея на борту apache commons-lang, стоит использовать формат даты.
babinik
19
Если вы не хотите включать Jodatime (как бы хорошо)
Это потокобезопасно. Joda-Time создает новые неизменные объекты а не изменяет существующие.
Если вы действительно хотели запросить формат без секунд, с разрешением в минуты, то используйте один из многих встроенных форматеров в Joda-Time.
DateTime now =newDateTime(DateTimeZone.UTC );String output =ISODateTimeFormat.dateHourMinute.print( now );
java.time
Для Java 8 и более поздних версий Joda-Time продолжает работать. Но встроенный java.time каркасных вытесняет Joda-Time. Поэтому перенесите свой код из Joda-Time в java.time, как только это будет удобно.
Чтобы узнать больше, смотрите Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, соответствующий JDBC 4.2 или более поздней версии . Нет необходимости в строках, нет необходимости в java.sql.*классах.
Более поздние версии Android связывают реализации классов java.time.
Для более ранних версий Android (<26) проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше). Смотрите Как использовать ThreeTenABP… .
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как Interval, YearWeek, YearQuarter, и более .
Вы можете использовать Java SimpleDateFormat со следующим шаблоном yyyy-MM-dd'T'HH:mm:ssXXXдля ISO 8601.
Пример кода: (перечисляет для всех доступных часовых поясов)
for(String timeZone :TimeZone.getAvailableIDs()){DateFormat dateFormat =newSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
dateFormat.setTimeZone(TimeZone.getTimeZone(timeZone));String formatted = dateFormat.format(newDate());System.out.print(formatted);if(formatted.endsWith("Z")){// These time zone's have offset of '0' from GMT.System.out.print("\t("+ timeZone +")");}System.out.println();}
Если вы хотите текущее время, нет необходимости проходить через старомодный Dateобъект. Просто делай Instant.now().toString(). Если вы получили Dateот устаревшего API, ваш метод является лучшим.
Некоторые из других Ответов верны в рекомендациях классов java.time, но вы можете использовать ненужные длины для ваших конкретных потребностей.
Instant.now()// Capture the current moment in UTC with a resolution as fines nanoseconds but usually in microseconds or milliseconds..truncatedTo(ChronoUnit.MINUTES )// Lop off any seconds or fractional second, to get a value in whole minutes..toString()// Generate a String in standard ISO 8601 format where a `T` separates the year-month-day from the hour-minute-second, and the `Z` on the end for “Zulu” means UTC.
2018-01-23T12: 34Z
Instant::toString
jav.time.InstantКласс представляет собой момент в UTC, всегда в UTC.
В Zконце строки вашего примера 2010-10-12T08:50Zпроизносится «Зулу» и означает UTC .
Ваш желаемый формат соответствует стандарту ISO 8601 . В java.time классы используют эти стандартные форматы по умолчанию при разборе / генерации строк. Поэтому нет необходимости указывать шаблон форматирования. Просто позвониInstant::toString как показано выше.
Если вы хотите целые минуты без секунды или доли секунды, то обрежьте. Укажите единицу времени через ChronoUnitкласс.
Instant instant =Instant.now().truncatedTo(ChronoUnit.MINUTES );String output = instant.toString();// Generate a `String` object in standard ISO 8601 format.
Чтобы узнать больше, смотрите Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, соответствующий JDBC 4.2 или более поздней версии . Нет необходимости в строках, нет необходимости в java.sql.*классах.
Более поздние версии Android связывают реализации классов java.time.
Для более ранних версий Android (<26) проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше). Смотрите Как использовать ThreeTenABP… .
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как Interval, YearWeek, YearQuarter, и более .
Создание статического состояния может вызвать проблемы, так как SimpleDateFormat не является поточно-ориентированным: «Форматы даты не синхронизированы. Рекомендуется создавать отдельные экземпляры формата для каждого потока. Если несколько потоков обращаются к формату одновременно, он должен быть синхронизирован извне». docs.oracle.com/javase/7/docs/api/java/text/…
Юха Паломяки
2
Как упомянул @Juha Palomäki, это не потокобезопасно. Если вы используете Java 8 или выше, ThreadLocal.withInitial может это исправить. Если вы используете Java 7 или ниже, создайте новый ThreadLocal и
укажите
@ user393274 - если вы используете Java 8 следует использовать Instant, DateTimeFormatи другие современные Потокобезопасная замены
Я немного озадачен тем, что проблема с SimpleDateFormat не является поточно-ориентированной. Если два потока выполняют статический инициализатор одновременно, я не вижу ничего более страшного, чем то, что конструктор SimpleDateFormat вызывается дважды, но только один его момент (последний завершающий) записывается как «df».
Гилбертпилз
2
privatestaticString getCurrentDateIso(){// Returns the current date with the same format as Javascript's new Date().toJSON(), ISO 8601DateFormat dateFormat =newSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.US);
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));return dateFormat.format(newDate());}
Тем не менее, joda-time поддерживает только расширенный формат: «2015-12-09T00: 22: 42.930Z», а не базовый: «20151209T002242.930Z» ... мы могли бы лучше протестировать список форматов с помощью Java SimpleDateFormat.
Я сделал это в Android, используя Calendar и SimpleDateFormat. Следующий метод возвращает календарь с часовой поясом GMT (это универсальный часовой пояс). Затем вы можете использовать класс Calendar, чтобы установить часы между разными часовыми поясами, используя метод setTimeZone () класса Calendar.
ПОМНИТЕ: класс Date не знает о существовании TimeZone. По этой причине, если вы отлаживаете одну дату, вы всегда видите дату вашего текущего часового пояса.
Если вы заботитесь о производительности, я создал библиотеку, которая превосходит стандартные средства синтаксического анализа и форматирования Java в манипулировании датами в формате ISO8601. Реализации DatetimeProcessor являются поточно-ориентированными и могут кэшироваться в параллельной карте или в статических полях.
Они должны были добавить какой-то простой способ перехода от даты к мгновенному, а также метод под названием toISO8601, который ищут многие люди. В качестве дополнения к другим ответам, от java.util.Date до формата ISO 8601:
Instant.ofEpochMilli(date.getTime()).toString();
Это не очень заметно при использовании автозаполнения, но
java.time.Instant.toString():
Строковое представление этого момента с использованием ISO-8601
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, повышает его долгосрочную ценность.
private static SimpleDateFormat
не является потокобезопасным.Ответы:
Используйте
SimpleDateFormat
для форматирования любогоDate
объекта, который вы хотите:Использование,
new Date()
как показано выше, отформатирует текущее время.источник
"yyyy-MM-dd'T'HH:mmZ"
в моем приложении должно быть много экземпляров , каждый раз, когда мне нужна дата в формате ISO-8601. С JodaTime, как я вижу, я могу использовать предопределенный форматерISODateTimeFormat
, который выполняет эту работу для меня ..Z
действует шаблон в SimpleDateFormat, а сделать это:yyyy-MM-dd'T'HH:mm'Z'
.Для систем, где часовой пояс по умолчанию не UTC:
SimpleDateFormat
Экземпляр может быть объявлена как глобальная константа , если это необходимо часто, но нужно учитывать , что этот класс не является потокобезопасным. Он должен быть синхронизирован при одновременном доступе нескольких потоков.РЕДАКТИРОВАТЬ: Я бы предпочел Joda Time, если делать много разных манипуляций с временем / датой ...
РЕДАКТИРОВАТЬ2: исправлено:
setTimeZone
не принимает строку (исправлено Полом)источник
2016-06-14T13:56+0000
- вопрос задает что-то вроде2016-06-14T13:56Z
Java 8 Native
java.time упрощает работу с Java 8. И потокобезопасен.
Результат:
2015-04-14T11:07:36.639Z
Настраивая или связывая параметры / операции ZonedDateTime и DateTimeFormatter , вы можете в определенной степени легко контролировать часовой пояс и точность :
Результат:
2015-04-14T11:07:00+01:00[Europe/Paris]
Уточненные требования, такие как удаление части секунд, должны по-прежнему удовлетворяться пользовательскими форматами или пользовательской последующей обработкой.
источник
ZoneId.of( "America/Montreal" )
.return DateTimeFormatter.ISO_INSTANT.format(this);
DateTimeFormatter.ISO_INSTANT
иDateTimeFormatter.ISO_DATE_TIME
использую 6 цифр за секунды, а не 3, которые больше не воспринимаются Spring@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
.Java 8:
Pre Java 8:
Из документов :
источник
DateTime dt = new DateTime(); DateTimeFormatter fmt = ISODateTimeFormat.dateTime(); String str = fmt.print(dt);
, либо вы инкапсулируетеreturn String.format("%tFT%<tRZ", new Date());
в класс, и делайтеstr = Iso8601Time.now()
, где когда-либо вам это нужно. (Это не значит, что формат ISO изменится.) Если окажется, что вам нужно больше, чем просто текущая дата в формате ISO, используйте lib.%tFT%<tTZ
будет включать секунды;%tFT%<tTZ.%<tL
будет включать в себя миллисекунды.Начиная с Java 8 вы можете просто сделать:
Из
java.time.Instant
документов:источник
SimpleDateFormats
.toString
, что во многих случаях вам даже не нужно вызывать это явно.использовать JodaTime
Вот документация для JodaTime Formatter
Редактировать:
Если вы не хотите добавлять или не видите значения добавления выше библиотеки, вы можете просто использовать встроенный
SimpleDateFormat
класс для форматирования даты в требуемый формат ISOкак предложено @Joachim Sauer
источник
ISODateTimeFormat
- предопределенный форматер ISO-8601.DateFormatUtils из Apache
commons-lang3
имеют полезные константы, например:DateFormatUtils.ISO_DATETIME_FORMAT
источник
DateFormatUtils.format(new Date(), "yyyy-MM-dd'T'HH:mm'Z'", TimeZone.getTimeZone("UTC"));
текущий момент по умолчанию в часовом поясе:DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(new Date())
; @ yegor256 спасибо за упоминаниеDateFormatUtils
, имея на борту apache commons-lang, стоит использовать формат даты.Если вы не хотите включать Jodatime (как бы хорошо)
который возвращает строку:
который немного отличается от первоначального запроса, но по-прежнему ISO-8601.
источник
ISO 8601 может содержать секунды, см. Http://en.wikipedia.org/wiki/ISO_8601#Times.
поэтому код должен быть
источник
Joda времени
Обновление: Joda время проект сейчас находится в режиме технического обслуживания , с командой советуя миграции в java.time классы. Для Java 6 и 7 см. Проект ThreeTen-Backport , дополнительно адаптированный для Android в проекте ThreeTenABP .
Использование библиотеки Joda-Time ...
Это потокобезопасно. Joda-Time создает новые неизменные объекты а не изменяет существующие.
Если вы действительно хотели запросить формат без секунд, с разрешением в минуты, то используйте один из многих встроенных форматеров в Joda-Time.
java.time
Для Java 8 и более поздних версий Joda-Time продолжает работать. Но встроенный java.time каркасных вытесняет Joda-Time. Поэтому перенесите свой код из Joda-Time в java.time, как только это будет удобно.
Смотрите мой другой ответ для современного решения.
О java.time
Java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытеснять неприятные старые устаревшие классы даты и времени , такие как
java.util.Date
,Calendar
, иSimpleDateFormat
.Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, смотрите Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, соответствующий JDBC 4.2 или более поздней версии . Нет необходимости в строках, нет необходимости в
java.sql.*
классах.Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как
Interval
,YearWeek
,YearQuarter
, и более .источник
Для Java версии 7
Вы можете следить за документацией Oracle: http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html.
X - используется для часового пояса ISO 8601
источник
Вы можете использовать Java SimpleDateFormat со следующим шаблоном
yyyy-MM-dd'T'HH:mm:ssXXX
для ISO 8601.Вы можете использовать:
для часового пояса vm по умолчанию. Больше здесь
Вы можете заметить дату и время для нескольких часовых поясов, заканчивающихся на
'Z'
. Эти часовые пояса имеют смещение'0'
от GMT.Более подробную информацию можно найти здесь .
источник
Я верю, что самый простой способ - это сначала перейти к моменту, а затем к строке:
Что приведет к:
2017-09-08T12:56:45.331Z
источник
Date
объект. Просто делайInstant.now().toString()
. Если вы получилиDate
от устаревшего API, ваш метод является лучшим.java.util.Date
,java.util.Calendar
иjava.text.SimpleDateFormat
теперь являются устаревшими , вытесняются классами java.time, встроенными в Java 8 и более поздние версии . Смотрите Учебник по Oracle .ТЛ; др
Некоторые из других Ответов верны в рекомендациях классов java.time, но вы можете использовать ненужные длины для ваших конкретных потребностей.
Instant::toString
jav.time.Instant
Класс представляет собой момент в UTC, всегда в UTC.В
Z
конце строки вашего примера2010-10-12T08:50Z
произносится «Зулу» и означает UTC .Ваш желаемый формат соответствует стандарту ISO 8601 . В java.time классы используют эти стандартные форматы по умолчанию при разборе / генерации строк. Поэтому нет необходимости указывать шаблон форматирования. Просто позвони
Instant::toString
как показано выше.Если вы хотите целые минуты без секунды или доли секунды, то обрежьте. Укажите единицу времени через
ChronoUnit
класс.Около java.time
Java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытеснять неприятные старые устаревшие классы даты и времени , такие как
java.util.Date
,Calendar
, иSimpleDateFormat
.Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, смотрите Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, соответствующий JDBC 4.2 или более поздней версии . Нет необходимости в строках, нет необходимости в
java.sql.*
классах.Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как
Interval
,YearWeek
,YearQuarter
, и более .источник
Вот целый класс, оптимизированный таким образом, что вызов "now ()" не делает больше ничего, что он должен делать.
источник
Instant
,DateTimeFormat
и другие современные Потокобезопасная заменыисточник
Тем не менее, joda-time поддерживает только расширенный формат: «2015-12-09T00: 22: 42.930Z», а не базовый: «20151209T002242.930Z» ... мы могли бы лучше протестировать список форматов с помощью Java SimpleDateFormat.
источник
Я сделал это в Android, используя Calendar и SimpleDateFormat. Следующий метод возвращает календарь с часовой поясом GMT (это универсальный часовой пояс). Затем вы можете использовать класс Calendar, чтобы установить часы между разными часовыми поясами, используя метод setTimeZone () класса Calendar.
ПОМНИТЕ: класс Date не знает о существовании TimeZone. По этой причине, если вы отлаживаете одну дату, вы всегда видите дату вашего текущего часового пояса.
источник
Если вы заботитесь о производительности, я создал библиотеку, которая превосходит стандартные средства синтаксического анализа и форматирования Java в манипулировании датами в формате ISO8601. Реализации DatetimeProcessor являются поточно-ориентированными и могут кэшироваться в параллельной карте или в статических полях.
источник
Они должны были добавить какой-то простой способ перехода от даты к мгновенному, а также метод под названием
toISO8601
, который ищут многие люди. В качестве дополнения к другим ответам, от java.util.Date до формата ISO 8601:Это не очень заметно при использовании автозаполнения, но
java.time.Instant.toString()
:источник
источник
Попробуй это,
Его для формата ISO 8601
источник