java.time
DateTimeFormatter requiredFormatter
= DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)
.withLocale(Locale.FRENCH);
String originalDateTimeString = "2019-04-11T05:00:54.000+01:00";
OffsetDateTime dateTime = OffsetDateTime.parse(originalDateTimeString);
String requiredDate = dateTime.format(requiredFormatter);
System.out.println("requiredDate: " + requiredDate);
Выходные данные из этого фрагмента (на Java 9.0.4):
обязательно Дата: 11/04/2019 05:00
Используйте встроенные в Java локализованные форматы даты и времени. Не беспокойтесь о том, чтобы прокрутить свой собственный форматер через строку шаблона формата. В большинстве случаев Java лучше знает, чего ожидает ваша аудитория, написание строки шаблона формата подвержено ошибкам, а код, использующий встроенный формат, лучше переносится на другой язык. Конечно, я не знаю, является ли ваш желаемый язык французским, поскольку многие другие языки соответствуют формату, который вы запрашивали, dd/mm/yyyy HH:mm
. Просто выберите локаль, подходящую для вашей ситуации.
Классы даты / времени, которые вы пытались использовать, XMLGregorianCalendar
и SimpleDateFormat
, уже устарели, а последние общеизвестно хлопотны, поэтому не следует их использовать, если вы можете их избежать (что вы можете). Вместо этого я использую java.time, современный Java-интерфейс даты и времени.
Что пошло не так в вашем коде?
- Минорная точка, имена переменных в Java начинаются с маленькой буквы, поэтому ваша переменная должна называться
dateTime
или datetime
.
Нельзя присвоить строку (например, "2019-04-11T05:00:54.000+01:00"
) переменной типа XMLGregorianCalendar
. Это то, что ваше сообщение об ошибке пытается сообщить вам. Правильный способ конвертации был бы таким, который уже показан в ответе zmr:
XMLGregorianCalendar dateTime = DatatypeFactory.newInstance()
.newXMLGregorianCalendar("2019-04-11T05:00:54.000+01:00");
A SimpleDateFormat
не может отформатировать XMLGregorianCalendar
. Код компилируется, но во время выполнения вы получаете java.lang.IllegalArgumentException: Cannot format given Object as a Date
.
Ссылка
Обучающее руководство по Oracle: Дата и время , объясняющее, как использовать java.time.