java.time
dateTimeWithTimeZone = Instant.now().toString();
System.out.println(dateTimeWithTimeZone);
Когда я только что запустил этот фрагмент, я получил такой вывод:
2019-03-18T22: 28: 13.549319Z
Это не ясно со страницы, на которую вы ссылаетесь, но это строка ISO 8601 в UTC, так что должно быть все, что вам нужно. Я использую тот факт, что классы java.time создают выходные данные ISO 8601 из своих методов toString
. Связанная страница показывает формат с дефисами, T
и двоеточиями (2008-09-15T15:53:00+05:00
), показывает еще один пример с десятичными знаками в секундах (15:53:00.322348
) и третий пример с Z
, означающим UTC (20080915T155300Z
) так что я ожидаю, что комбинация всех этих трех тоже будет в порядке.
Формат, который вы использовали в задании, похоже, пытается получить смещение как +00:00
, а не Z
. Если это требование, это только немного сложнее. Мы используем явный форматер для контроля изменений в ISO 8601:
DateTimeFormatter iso8601Formatter
= DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSSSSxxx");
dateTimeWithTimeZone = OffsetDateTime.now(ZoneOffset.UTC).format(iso8601Formatter);
System.out.println(dateTimeWithTimeZone);
2019-03-18T22: 28: 13,729711 + 00: 00
Что пошло не так в вашем коде?
Вы пытались использовать символы форматирования из вашего источника с SimpleDateFormat
. Во-первых, вы никогда не должны, и особенно в Java 8 или более поздней версии, использовать SimpleDateFormat
. Этот класс, как известно, хлопотно и давно устарел. Во-вторых, некоторые из его букв шаблонного формата соответствуют символам из вашего источника, а некоторые - нет, поэтому вы не можете просто использовать строку symvol оттуда. Вместо этого вам нужно прочитать документацию и найти правильные буквы шаблонов форматов для года, месяца и т. Д. И помните, что они чувствительны к регистру: MM
и mm
различны.
Ссылка
Учебное пособие по Oracle: Дата и время
объясняя, как использовать java.time.