如何将"2019-04-11T05:00:54.000+01:00"转换为日/月/年 hh:mm 格式



我无法将XMLGregorianCalendar日期时间转换为格式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";

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 上):

必需日期: 2019-11-04 05:00

使用 Java 内置的本地化日期和时间格式。不要费心通过格式模式字符串滚动自己的格式化程序。在大多数情况下,Java 更了解受众的期望,编写格式模式字符串容易出错,而使用内置格式的代码更适合移植到不同的语言环境。当然,我不知道您想要的区域设置是否是法语,因为许多其他区域设置也符合您要求的格式,dd/mm/yyyy HH:mm也是如此。只需选择适合您情况的区域设置即可。

您尝试使用的日期/时间类,XMLGregorianCalendarSimpleDateFormat,现在已经很旧了,后者是出了名的麻烦,所以如果你可以避免它(你可以)。相反,我使用的是java.time,现代Java日期和时间API。

您的代码中出了什么问题?

  • 次要的一点是,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 教程:日期时间解释如何使用 java.time。

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

最新更新