这个问题在这里已经有一个答案:

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


Jesper回答的解决方案

使用JODA时间的解决方案代码:

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");
有帮助吗?

解决方案

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

您能做的就是手动删除 : 从时区偏移量,以便您得到一个看起来像这样的字符串:

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

(请注意,时区偏移是 -0800 代替 -08:00)。那你可以用它解析 SimpleDateFormat 使用格式 yyyy-MM-dd'T'HH:mm:ss.SSSZ.

但是最好使用流行 乔达时间 库处理时间和日期;它比标准的Java API日期和日历类别以及正确的ISO 8601格式要好得多。

其他提示

使用SimpleDateFormat,请参阅此处的Javadocs:

然后将日期转换为日历。在这里查看很多示例:

您可以尝试此代码

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

这将绝对为您提供Gregorian Calender对象

 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();

其他答案是正确的,但现在已经过时了。他们使用现在由Java.Time Framework取代的麻烦旧课程。

使用Java.Time

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

输入字符串包含一个偏移符号,因此我们将其解析为一个 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的旧代码进行互操作,则可以转换。使用添加到旧类中的新方法进行转换。有关更多信息和漂亮的图表,请参阅我的 问题回答.

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.

乔达时间 项目,现在 维护模式, ,建议迁移到Java.Time。

要了解更多,请参阅 Oracle教程. 。并搜索堆栈溢出以获取许多示例和解释。

java的大部分功能都将后输入到Java 6&7 in Threeten-Backport 并进一步适应 安卓三分.

Threeten-Extra 项目扩展Java.Time提供其他类。该项目是可能将来在Java.Time中增加的遗嘱。您可能在这里找到一些有用的课程,例如 Interval, YearWeek, YearQuarter, , 和更多。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top