0

我有一个字符串日期“2010-12-15T16:26:49.841-08:00”,我需要将其转换为 Java 中的 GregorianCalendar。你怎么做到这一点?


Jesper回答的解决方案

使用 joda time 的解决方案代码:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ").withOffsetParsed();
DateTime date = formatter.parseDateTime("2010-12-15T16:26:49.841-08:00");
4

5 回答 5

1

使用 SimpleDateFormat,请在此处查看 javadocs:

然后将日期转换为日历。看看这里有很多例子:

于 2010-12-16T03:14:04.970 回答
1

不幸的是,标准SimpleDateFormat类不能很好地处理ISO 8601 格式。具体来说,它无法处理最后:在时区偏移中的那个。

您可以做的是手动:从时区偏移中删除 ,这样您就可以得到一个如下所示的字符串:

2010-12-15T16:26:49.841-0800

(请注意,时区偏移量-0800不是-08:00)。然后你可以SimpleDateFormat用 format解析它yyyy-MM-dd'T'HH:mm:ss.SSSZ

但最好使用流行的Joda-Time库来处理时间和日期;它比标准的 Java API 日期和日历类要好得多,并且可以正确处理 ISO 8601 格式。

于 2010-12-16T09:07:06.810 回答
0

你可以试试这段代码

DateTimeFormatter formatter =
    DateTimeFormat.forPattern("your pattern").withOffsetParsed();
DateTime dateTime = formatter.parseDateTime("your input");
GregorianCalendar cal = dateTime.toGregorianCalendar();

这肯定会给你公历日历对象

于 2010-12-16T03:18:07.430 回答
0
 String dateTimeString="2010-12-15T16:26:49.841-08:00"; 

 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

 DateTime dateTime = formatter.parseDateTime(dateTimeString);

 GregorianCalendar cal = dateTime.toGregorianCalendar();
于 2010-12-16T05:13:33.150 回答
0

其他答案是正确的,但现在已过时。他们使用现在被 java.time 框架取代的麻烦的旧类。

使用 java.time

输入字符串恰好符合ISO 8601标准格式。因此无需指定格式化模式,因为 java.time 类在解析/生成字符串时默认使用 ISO 8601。

输入字符串包含一个与 UTC 的偏移量,因此我们将其解析为OffsetDateTime.

String input = "2010-12-15T16:26:49.841-08:00" ;
OffsetDateTime odt = OffsetDateTime.parse( input );

如果您有一个特定的时区,而不仅仅是与 UTC 的偏移,请应用它。

ZoneId zoneId = ZoneId.of( "America/Los_Angele" );
ZonedDateTime zdt = odt.atZone( zoneId );

GregorianCalendar

您应该避免使用旧的日期时间类,例如GregorianCalendar. 但是,如果您必须与尚未针对 java.time 更新的旧代码进行互操作,则可以转换。使用添加到旧类的新方法进行转换。有关更多信息和漂亮的图表,请参阅我的问答

Calendar cal = java.util.GregorianCalendar.from( zdt );  // Do such conversions out of java.time only if absolutely necessary.

关于 java.time

java.time框架内置于 Java 8 及更高版本中这些类取代了旧的麻烦的日期时间类,例如java.util.Date, .Calendar, & java.text.SimpleDateFormat

现在处于维护模式Joda-Time项目建议迁移到 java.time。

要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。

许多 java.time 功能在 ThreeTen-Backport 中向后移植到 Java 6 和 7,并在ThreeTenABP进一步适应Android

ThreeTen -Extra项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuarter等。

于 2016-08-14T22:41:59.123 回答