其他答案是正确的,但现在已过时。他们使用现在被 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 的试验场。您可能会在这里找到一些有用的类,例如Interval
、YearWeek
、YearQuarter
等。