如何将2010-12-15T16:26:49.841-08:00转换为Java中的Gregoriancalendar? [复制
-
10-10-2019 - |
题
这个问题在这里已经有一个答案:
我有一个字符串日期“ 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
, , 和更多。