如何将“ 2019-04-11T05:00:54.000 + 01:00”转换为dd / MM / yyyy hh:mm格式

时间:2019-04-12 06:04:13

标签: java date time format

我无法将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 个答案:

答案 0 :(得分:2)

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。只需选择适合您情况的语言环境即可。

您尝试使用的日期/时间类XMLGregorianCalendarSimpleDateFormat现在已经过时了,众所周知,后者很麻烦,因此,如果可以避免使用,则不应使用那些能够)。相反,我使用的是现代Java日期和时间API java.time。

您的代码出了什么问题?

  • 小点,Java中的变量名称以小写字母开头,因此您的变量应命名为dateTimedatetime
  • 您不能将字符串(如"2019-04-11T05:00:54.000+01:00")分配给类型为XMLGregorianCalendar的变量。这就是您的错误消息试图告诉您的。正确的转换方式应该是zmr的答案中已经显示的一种方式:

       XMLGregorianCalendar dateTime = DatatypeFactory.newInstance()
               .newXMLGregorianCalendar("2019-04-11T05:00:54.000+01:00");
    
  • SimpleDateFormat无法格式化XMLGregorianCalendar。代码可以编译,但是在运行时您会得到一个java.lang.IllegalArgumentException: Cannot format given Object as a Date

链接

Oracle tutorial: Date Time解释了如何使用java.time。

答案 1 :(得分:0)

您正在尝试将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);
}