Java数据格式化程序

Java数据格式化程序,java,simpledateformat,Java,Simpledateformat,到目前为止,有没有一种简单的方法可以在Java中解析以下两种类型的字符串 2013-11-22T18:37:55.645+0000 2013-11-22T14:20:30.645Z 两者的意思相同,但我必须使用两种不同的日期格式模式 yyyy-MM-dd'T'HH:mm:ss.SSSZ yyyy-MM-dd'T'HH:mm:ss.SSS'Z' 我只想用一种模式来实现它。是的,有一种非常简单的方法叫做SimpleDateFormat。将您的格式发送给该类的构造函数,并根据您的规范设置日期。您是

到目前为止,有没有一种简单的方法可以在Java中解析以下两种类型的字符串

2013-11-22T18:37:55.645+0000
2013-11-22T14:20:30.645Z
两者的意思相同,但我必须使用两种不同的日期格式模式

yyyy-MM-dd'T'HH:mm:ss.SSSZ
yyyy-MM-dd'T'HH:mm:ss.SSS'Z'

我只想用一种模式来实现它。

是的,有一种非常简单的方法叫做
SimpleDateFormat
。将您的格式发送给该类的构造函数,并根据您的规范设置日期。

您是否尝试过:

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
    Date dt1 = sdf.parse(str1);

两种格式模式都是相同的变体

在2.3中简单

一行代码,使用Joda Time的内置格式化程序。该格式化程序处理两个偏移量,要么是零,要么是
Z

org.joda.time.format.ISODateTimeFormat.dateTime().withZoneUTC().parseDateTime(eitherstringgoesher);
更详细的代码

/©2013巴西尔布尔克。此源代码可以由任何对此承担全部责任的人自由使用。
字符串dateTimeStringZero=“2013-11-22T18:37:55.645+0000”;
字符串dateTimeStringZulu=“2013-11-22T18:37:55.645Z”;
org.joda.time.DateTime dateTimeZero=org.joda.time.format.ISODateTimeFormat.DateTime().withZoneUTC().parseDateTime(dateTimeStringZero);
org.joda.time.DateTime dateTimeZulu=org.joda.time.format.ISODateTimeFormat.DateTime().withZoneUTC().parseDateTime(dateTimeStringZulu);
输出

System.out.println(“dateTimeZero:+dateTimeZero”);
System.out.println(“dateTimeZulu:+dateTimeZulu”);
当运行时

dateTimeZero:2013-11-22T18:37:55.645Z
日期时间祖鲁:2013-11-22T18:37:55.645Z


如果需要时间分区DateTime,请将
更改为withZoneUTC()
。参见方法。对于用户的默认时区,只需省略任何时区调用。

您可以使用第一个,只需调用
String.replace(“Z”,“+0000”)
输入字符串,不是吗?是的,我可以这样做,但如果可以避免的话,我宁愿不这样做。您可以子类吗?当然可以检查SimpleDateFormat,但我必须用两种格式调用它两次。我想要一种可以同时匹配两种模式的单一格式不幸的是,
SimpleDateFormat
不支持这种选项。这里似乎提供了一种接受模式的
PatternDateFormat
思想,因此可以匹配多种格式。欢迎你实施这样一个计划。听起来很有趣,也很有用!这正是我想要的。。不幸的是,这意味着我需要引入joda jar文件。我想我可以不用它,但似乎没有办法。@Harsha Joda Time是我添加到新项目中的第一件事(甚至在&)之前)。不幸的是,与java捆绑在一起的java.util.Date/Calendar类是出了名的糟糕,是java平台最糟糕的部分。这就是为什么在Java8中它们被(java.time.*)取代的原因。JSR 310的灵感来源于Joda Time,但完全重新设计,而不是直接构建在Joda Time上。