java - 如何将“2019-04-11T05:00:54.000+01:00”转换为 dd/MM/yyyy hh:mm 格式
问题描述
我无法将XMLGregorianCalendar
dateTime 转换为 format 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 上):
必填日期:11/04/2019 05:00
使用 Java 内置的本地化日期和时间格式。不要费心通过格式模式字符串滚动您自己的格式化程序。在大多数情况下,Java 更了解您的受众的期望,编写格式模式字符串容易出错,使用内置格式的代码更适合移植到不同的语言环境。当然,我不知道您想要的语言环境是否是法语,因为许多其他语言环境也符合您要求的格式dd/mm/yyyy HH:mm
。只需选择适合您情况的语言环境即可。
您尝试使用的日期/时间类 ,XMLGregorianCalendar
和SimpleDateFormat
, 现在已经过时了,而后者出了名的麻烦,因此如果可以避免(可以),则不应使用它们。相反,我使用的是现代 Java 日期和时间 API java.time。
你的代码出了什么问题?
- 小点,Java中的变量名以小写字母开头,所以你的变量应该被称为
dateTime
ordatetime
。 您不能将字符串(如
"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。
推荐阅读
- javascript - 传单起始位置
- javascript - 在数组中查找重复值时遇到问题
- marklogic - 使用 Jenkins 根据子文件夹名称将我的 SVN 存储库的子文件夹部署到 2 个不同的 MarkLogic DB 中
- python - 是否可以跨机器共享 virtualenv?
- python - BeautifulSoup RSS 提要提取一个选项卡重排“1”
- nginx - NGINX:强制 nginx 使用所有工作人员进行负载平衡
- node.js - updateMany() 后如何获取所有更新文档的值?
- c++ - char* escape "\" 在 libcurl 的 POSTFIELD 中丢失
- c# - 如何解决此错误“当前不会命中断点。没有为此文档加载任何符号。”
- mit-scratch - 如何将 SB3 文件转换为 EXE