Как получить текущий момент в формате ISO 8601 с датой, часами и минутами?


324

Каков самый элегантный способ получить представление в формате ISO 8601 текущего момента, UTC? Это должно выглядеть так:2010-10-12T08:50Z .

Пример:

String iso8601 = DateFormat.getDateTimeInstance(DateFormat.ISO_8601).format(date);


5
@marcolopes Помните, что использование private static SimpleDateFormatне является потокобезопасным.
vegemite4me


Аналогично этому другому Вопросу , но этот вопрос усекает до целой секунды, тогда как этот Вопрос усекает до целой минуты.
Василий Бурк

Ответы:


292

Используйте SimpleDateFormatдля форматирования любого Dateобъекта, который вы хотите:

TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'"); // Quoted "Z" to indicate UTC, no timezone offset
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());

Использование, new Date()как показано выше, отформатирует текущее время.


8
@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
Я только что исправил ошибку часового пояса - так как это принятый ответ, я думаю, что это было правильно.
СД

2
Z нужно указывать как «yyyy-MM-dd'T'HH: mm'Z '»
Кимбалл Робинсон

224

Для систем, где часовой пояс по умолчанию не UTC:

TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());

SimpleDateFormatЭкземпляр может быть объявлена как глобальная константа , если это необходимо часто, но нужно учитывать , что этот класс не является потокобезопасным. Он должен быть синхронизирован при одновременном доступе нескольких потоков.

РЕДАКТИРОВАТЬ: Я бы предпочел Joda Time, если делать много разных манипуляций с временем / датой ...
РЕДАКТИРОВАТЬ2: исправлено: setTimeZoneне принимает строку (исправлено Полом)


9
Этот формат не является константой в какой-либо встроенной библиотеке?
Даниэль Каплан

Для «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. И потокобезопасен.

ZonedDateTime.now( ZoneOffset.UTC ).format( DateTimeFormatter.ISO_INSTANT )

Результат: 2015-04-14T11:07:36.639Z

Вы можете испытать желание использовать более легкие, Temporalтакие как Instantили LocalDateTime, но им не хватает поддержки форматера или данных часового пояса. Только ZonedDateTimeработает из коробки.

Настраивая или связывая параметры / операции ZonedDateTime и DateTimeFormatter , вы можете в определенной степени легко контролировать часовой пояс и точность :

ZonedDateTime.now( ZoneId.of( "Europe/Paris" ) )
             .truncatedTo( ChronoUnit.MINUTES )
             .format( DateTimeFormatter.ISO_DATE_TIME )

Результат: 2015-04-14T11:07:00+01:00[Europe/Paris]

Уточненные требования, такие как удаление части секунд, должны по-прежнему удовлетворяться пользовательскими форматами или пользовательской последующей обработкой.

.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) // 2015-04-14T11:07:00
.format( DateTimeFormatter.ISO_LOCAL_DATE ) // 2015-04-14
.format( DateTimeFormatter.ISO_LOCAL_TIME ) // 11:07:00
.format( DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm" ) ) // 2015-04-14 11:07

Для Java 6 и 7 вы можете рассмотреть back-порты java.time, такие как ThreeTen-Backport , который также имеет порт Android . Оба легче, чем Йода, и извлекли уроки из опыта Йоды - особенно. учитывая, что java.time разработан автором Йоды.


9
Хороший ответ. Обратите внимание на полезную привычку явно указывать часовой пояс, а не неявно полагаться на текущий часовой пояс 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).
DanielM

126

Java 8:

thisMoment = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mmX")
                              .withZone(ZoneOffset.UTC)
                              .format(Instant.now());

Pre Java 8:

thisMoment = String.format("%tFT%<tRZ",
                           Calendar.getInstance(TimeZone.getTimeZone("Z")));

Из документов :

'R'    Время, отформатированное для 24-часовых часов как «% tH:% tM»
'F'    Полная дата ISO 8601 отформатирована как «% tY-% tm-% td».


26
Ну, либо вы добавляете дополнительную стороннюю библиотеку в качестве зависимости от вашего проекта (которую вы, возможно, захотите обновлять, и поставляете вместе с вашим приложением, эй, это просто дополнительные 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
Очень аккуратное решение, должно быть уже принятым ответом :)
AbdelHady

94

Начиная с Java 8 вы можете просто сделать:

Instant.now().toString();

Из java.time.Instantдокументов:

сейчас

public static Instant now()

Получает текущий момент от системных часов.

Это запросит системные часы UTC, чтобы получить текущий момент.

 


public String toString()

Строковое представление этого момента с использованием представления ISO-8601.

Используемый формат такой же, как DateTimeFormatter.ISO_INSTANT.


11
Это правильный ответ, и это скандал, что за все это выдумано не было SimpleDateFormats.
Дэвид Моулз

Рад, что прочитал больше ответов. Я согласен, это должен быть ответ сейчас.
Ксан-Кун Кларк-Дэвис

И потому toString, что во многих случаях вам даже не нужно вызывать это явно.
kaya3

1
Предупреждение в комментарии к предыдущему ответу применимо и здесь: «Предупреждение: решение для Java 8, использующее ISO_INSTANT, имеет раздражающую причуду. Когда миллисекунды равны 0, они не включаются в вывод. Это разрешено в соответствии с ISO 8601 стандартные, но многие библиотеки и парсеры на других языках не так уж просты. "
Дейв Л.

27

использовать JodaTime

Система календаря ISO 8601 является реализацией по умолчанию в Joda-Time

Вот документация для JodaTime Formatter

Редактировать:

Если вы не хотите добавлять или не видите значения добавления выше библиотеки, вы можете просто использовать встроенный SimpleDateFormatкласс для форматирования даты в требуемый формат ISO

как предложено @Joachim Sauer

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ");
String nowAsString = df.format(new Date());

3
И как бы вы создали строку в формате, как показано в вопросе?
Иоахим Зауэр

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


3
Более точно, на текущий момент в 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 (как бы хорошо)

javax.xml.bind.DatatypeConverter.printDateTime(
    Calendar.getInstance(TimeZone.getTimeZone("UTC"))
);

который возвращает строку:

2012-07-10T16:02:48.440Z

который немного отличается от первоначального запроса, но по-прежнему ISO-8601.



10

Joda времени

Обновление: Joda время проект сейчас находится в режиме технического обслуживания , с командой советуя миграции в java.time классы. Для Java 6 и 7 см. Проект ThreeTen-Backport , дополнительно адаптированный для Android в проекте ThreeTenABP .

Использование библиотеки Joda-Time ...

String output = new DateTime( DateTimeZone.UTC ).toString() ;

Это потокобезопасно. Joda-Time создает новые неизменные объекты а не изменяет существующие.

Если вы действительно хотели запросить формат без секунд, с разрешением в минуты, то используйте один из многих встроенных форматеров в Joda-Time.

DateTime now = new DateTime( DateTimeZone.UTC ) ;
String output = ISODateTimeFormat.dateHourMinute.print( now ) ;

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?

  • Java SE 8 , Java SE 9 , Java SE 10 и более поздние версии
    • Встроенный.
    • Часть стандартного Java API со встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональности java.time перенесена на Java 6 и 7 в ThreeTen-Backport .
  • Android
    • Более поздние версии Android связывают реализации классов java.time.
    • Для более ранних версий Android (<26) проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше). Смотрите Как использовать ThreeTenABP… .

Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как Interval, YearWeek, YearQuarter, и более .


7

Для Java версии 7

Вы можете следить за документацией Oracle: http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html.

X - используется для часового пояса ISO 8601

TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());

System.out.println(nowAsISO);

DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
//nowAsISO = "2013-05-31T00:00:00Z";
Date finalResult = df1.parse(nowAsISO);

System.out.println(finalResult);

5

Вы можете использовать Java SimpleDateFormat со следующим шаблоном yyyy-MM-dd'T'HH:mm:ssXXXдля ISO 8601.

Пример кода: (перечисляет для всех доступных часовых поясов)

for (String timeZone : TimeZone.getAvailableIDs())
{
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
    dateFormat.setTimeZone(TimeZone.getTimeZone(timeZone));
    String formatted = dateFormat.format(new Date());
    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();
}

Вы можете использовать:

TimeZone.getDefault ()

для часового пояса vm по умолчанию. Больше здесь

Вы можете заметить дату и время для нескольких часовых поясов, заканчивающихся на 'Z'. Эти часовые пояса имеют смещение '0'от GMT.

Более подробную информацию можно найти здесь .


5

Я верю, что самый простой способ - это сначала перейти к моменту, а затем к строке:

String d = new Date().toInstant().toString();

Что приведет к:

2017-09-08T12:56:45.331Z


4
Если вы хотите текущее время, нет необходимости проходить через старомодный Dateобъект. Просто делай Instant.now().toString(). Если вы получили Dateот устаревшего API, ваш метод является лучшим.
Оле В.В.

Как прокомментировал Оле В.В., проблемные старые классы даты и времени, такие как java.util.Date, java.util.Calendarи java.text.SimpleDateFormatтеперь являются устаревшими , вытесняются классами java.time, встроенными в Java 8 и более поздние версии . Смотрите Учебник по Oracle .
Василий Бурк

5

ТЛ; др

Некоторые из других Ответов верны в рекомендациях классов 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.

Instant instant = Instant.now() ;

instant.toString (): 2018-01-23T12: 34: 56.123456Z

В 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.

Около 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?

  • Java SE 8 , Java SE 9 , Java SE 10 и более поздние версии
    • Встроенный.
    • Часть стандартного Java API со встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональности java.time перенесена на Java 6 и 7 в ThreeTen-Backport .
  • Android
    • Более поздние версии Android связывают реализации классов java.time.
    • Для более ранних версий Android (<26) проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше). Смотрите Как использовать ThreeTenABP… .

Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как Interval, YearWeek, YearQuarter, и более .


2

Вот целый класс, оптимизированный таким образом, что вызов "now ()" не делает больше ничего, что он должен делать.

public class Iso8601Util
{
    private static TimeZone tz = TimeZone.getTimeZone("UTC");
    private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");

    static
    {
        df.setTimeZone(tz);
    }

    public static String now()
    {
        return df.format(new Date());
    }
}

9
Создание статического состояния может вызвать проблемы, так как 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
private static String getCurrentDateIso()
{
    // Returns the current date with the same format as Javascript's new Date().toJSON(), ISO 8601
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
    dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    return dateFormat.format(new Date());
}

1

Тем не менее, joda-time поддерживает только расширенный формат: «2015-12-09T00: 22: 42.930Z», а не базовый: «20151209T002242.930Z» ... мы могли бы лучше протестировать список форматов с помощью Java SimpleDateFormat.


1

Я сделал это в Android, используя Calendar и SimpleDateFormat. Следующий метод возвращает календарь с часовой поясом GMT (это универсальный часовой пояс). Затем вы можете использовать класс Calendar, чтобы установить часы между разными часовыми поясами, используя метод setTimeZone () класса Calendar.

private static final String GMT = "GMT";
private static final String DATE_FORMAT_ISO = "yyyyMMdd'T'HHmmss";

public static Calendar isoToCalendar(final String inputDate) {
    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(GMT));
    try {
        SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT_ISO, Locale.US);
        dateFormat.setTimeZone(TimeZone.getTimeZone(GMT));
        Date date = dateFormat.parse(inputDate);
        calendar.setTime(date);
    } catch (ParseException e) {
        Log.e("TAG",e.getMessage());
    }
    return calendar;
}

ПОМНИТЕ: класс Date не знает о существовании TimeZone. По этой причине, если вы отлаживаете одну дату, вы всегда видите дату вашего текущего часового пояса.


1

Если вы заботитесь о производительности, я создал библиотеку, которая превосходит стандартные средства синтаксического анализа и форматирования Java в манипулировании датами в формате ISO8601. Реализации DatetimeProcessor являются поточно-ориентированными и могут кэшироваться в параллельной карте или в статических полях.

<dependency>
  <groupId>com.axibase</groupId>
  <artifactId>date-processor</artifactId>
  <version>1.0.3</version>
</dependency>
import com.axibase.date.DatetimeProcessor;
import com.axibase.date.PatternResolver;
import org.junit.Before;
import org.junit.Test;

import java.time.Clock;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZoneOffset;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;

public class DateFormatTest {
    private Clock clock;

    @Before
    public void prepare() {
        clock = Clock.fixed(Instant.ofEpochMilli(1571285405300L), ZoneId.of("Europe/Berlin"));
    }

    @Test
    public void testIsoMillis(){
        final DatetimeProcessor formatter = PatternResolver.createNewFormatter("iso");
        assertThat(formatter.print(clock.millis(), ZoneOffset.UTC), is("2019-10-17T04:10:05.300Z"));
    }

    @Test
    public void testIsoMillisLocalZone(){
        final DatetimeProcessor formatter = PatternResolver.createNewFormatter("iso");
        assertThat(formatter.print(clock.millis(), clock.getZone()), is("2019-10-17T06:10:05.300+02:00"));
    }

    @Test
    public void testIsoMinutes(){
        final DatetimeProcessor formatter = PatternResolver.createNewFormatter("yyyy-MM-ddTHH:mmXXX");
        assertThat(formatter.print(clock.millis(), ZoneOffset.UTC), is("2019-10-17T04:10Z"));
    }
}

0

Они должны были добавить какой-то простой способ перехода от даты к мгновенному, а также метод под названием toISO8601, который ищут многие люди. В качестве дополнения к другим ответам, от java.util.Date до формата ISO 8601:

Instant.ofEpochMilli(date.getTime()).toString();

Это не очень заметно при использовании автозаполнения, но java.time.Instant.toString():

Строковое представление этого момента с использованием ISO-8601


0
DateTimeFormatter.ISO_DATE_TIME
        .withZone(ZoneOffset.UTC)
        .format(yourDateObject.toInstant())

Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, повышает его долгосрочную ценность.
Вишал Чходвани

-2

Попробуй это,

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ");
        String date=sdf.format (new Date() );

Его для формата ISO 8601


2
Это будет использовать даты в неправильном часовом поясе, см. Ответ Карлоса.
Стиан Соиланд-Рейес
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.