【发布时间】:2013-12-02 07:01:43
【问题描述】:
如何使用 Java 将 ISO-8601 日期时间字符串(例如:2012-05-31T13:48:04Z)转换为秒数(10 digit integer)?
【问题讨论】:
-
从什么时候开始的秒数?
如何使用 Java 将 ISO-8601 日期时间字符串(例如:2012-05-31T13:48:04Z)转换为秒数(10 digit integer)?
【问题讨论】:
试试这个方法
String DateStr="2012-05-31T13:48:04Z";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
Date d=sdf.parse(DateStr);
System.out.println(d.getTime());
输出 1338452284000
来自 OP 的 cmets getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。Source
【讨论】:
Epoch 以来的秒数。你需要在这里提到很多东西,伙计! :)
使用SimpleDateFormat 并使用yyyy-MM-dd 'T' HH:mm:ss 'Z' 之类的格式
【讨论】:
Instant.parse( "2012-05-31T13:48:04Z" )
.getEpochSecond()
1338472084
看到这个code run live at IdeOne.com。
使用 java.time 类取代了麻烦的旧旧日期时间类会容易得多。
易于解析您的输入字符串,因为 java.time 类在生成/解析字符串时默认使用 ISO 8601 格式。所以不需要指定格式模式。
Instant 类表示UTC 中时间轴上的时刻,分辨率为nanoseconds(最多九 (9) 位小数)。
Instant instant = Instant.parse( "2012-05-31T13:48:04Z" ) ;
我猜你所说的“秒”是指自 1970 UTC (1970-01-01T00:00:00Z) 开始以来经过的秒数。 Instant 类可以告诉您自 Unix epoch 以来的秒数。
long secondsSinceEpoch = instant.getEpochSecond() ;
1338472084
显然要小心数据丢失。您忽略了日期时间值中可能存在的任何小数秒。
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date、Calendar 和 SimpleDateFormat。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
从哪里获得 java.time 类?
ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval、YearWeek、YearQuarter 和more。
【讨论】: