Java dateformatter

时间:2013-11-25 19:59:14

标签: java simpledateformat

是否有一种简单的方法可以将以下两种类型的String解析为Java中的日期

2013-11-22T18:37:55.645+0000
2013-11-22T14:20:30.645Z

两者意味着相同的事情,但我不得不使用2种不同的日期格式模式

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

我想只用1种模式来做。

3 个答案:

答案 0 :(得分:1)

是的,有一种叫做SimpleDateFormat的简单方法。将您的格式发送到此类的构造函数并根据您的规范格式化日期。

答案 1 :(得分:1)

您的两种格式都是ISO 8601的变体。

轻松Joda-Time 2.3。

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

org.joda.time.format.ISODateTimeFormat.dateTime().withZoneUTC().parseDateTime( eitherStringGoesHere );

更详细的代码......

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.

String dateTimeStringZero = "2013-11-22T18:37:55.645+0000";
String 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
dateTimeZulu: 2013-11-22T18:37:55.645Z

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

答案 2 :(得分:0)

你试过这个:

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