Как преобразовать «2019-04-11T05: 00: 54.000 + 01: 00» в формат дд / мм / гггг чч: мм - PullRequest
0 голосов
/ 12 апреля 2019

Я не могу преобразовать XMLGregorianCalendar dateTime в формат dd/mm/yyyy HH:mm.

public class HelloWorld{

 public static void main(String []args){

     XMLGregorianCalendar Datetime ="2019-04-11T05:00:54.000+01:00";

    SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm");


      String requiredDate = formatter.format(Datetime);

     System.out.println("requiredDate" + requiredDate);

 }
}

Я получаю ошибку как ----

incompatible types: String cannot be converted to XMLGregorianCalendar
     XMLGregorianCalendar Datetime ="2019-04-11T05:00:54.000+01:00";

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

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.

0 голосов
/ 12 апреля 2019

Вы пытаетесь присвоить dateTimeStamp XMLGregorianCalendar, который является абстрактным классом.

Вы можете достичь результата, используя приведенный ниже фрагмент кода: -

public static void main(String[] args) throws DatatypeConfigurationException {
    XMLGregorianCalendar datetime = DatatypeFactory.newInstance()
            .newXMLGregorianCalendar("2019-04-11T05:00:54.000+01:00");

    SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm");

    String requiredDate = formatter.format(datetime.toGregorianCalendar().getTime());

    System.out.println("requiredDate" + requiredDate);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...