use*_*979 55 java datetime date epoch
我有一个日期格式的字符串,如
Jun 13 2003 23:11:52.454 UTC
Run Code Online (Sandbox Code Playgroud)
包含millisec ...我想在epoch中转换.Java中是否有可用于执行此转换的实用程序?
Boh*_*ian 92
此代码显示如何使用java.text.SimpleDateFormat从String 解析java.util.Date:
String str = "Jun 13 2003 23:11:52.454 UTC";
SimpleDateFormat df = new SimpleDateFormat("MMM dd yyyy HH:mm:ss.SSS zzz");
Date date = df.parse(str);
long epoch = date.getTime();
System.out.println(epoch); // 1055545912454
Run Code Online (Sandbox Code Playgroud)
Date.getTime()
以毫秒为单位返回纪元时间.
Ort*_*kni 22
您还可以使用新的Java 8 API
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class StackoverflowTest{
public static void main(String args[]){
String strDate = "Jun 13 2003 23:11:52.454 UTC";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMM dd yyyy HH:mm:ss.SSS zzz");
ZonedDateTime zdt = ZonedDateTime.parse(strDate,dtf);
System.out.println(zdt.toInstant().toEpochMilli()); // 1055545912454
}
}
Run Code Online (Sandbox Code Playgroud)
本DateTimeFormatter
类取代了旧的SimpleDateFormat
.然后ZonedDateTime
,您可以创建一个可以从中提取所需纪元时间的文件.
主要优点是您现在是线程安全的.
感谢Basil Bourque的评论和建议.阅读他的答案以获取全部细节.
ZonedDateTime.parse(
"Jun 13 2003 23:11:52.454 UTC" ,
DateTimeFormatter.ofPattern ( "MMM d uuuu HH:mm:ss.SSS z" )
)
.toInstant()
.toEpochMilli()
Run Code Online (Sandbox Code Playgroud)
1055545912454
DateTimeFormatter
首先通过创建DateTimeFormatter
对象来定义格式化模式以匹配输入字符串.
String input = "Jun 13 2003 23:11:52.454 UTC";
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "MMM d uuuu HH:mm:ss.SSS z" );
Run Code Online (Sandbox Code Playgroud)
ZonedDateTime
将字符串解析为ZonedDateTime
.您可以将该类视为:(Instant
+ ZoneId
).
ZonedDateTime zdt = ZonedDateTime.parse ( "Jun 13 2003 23:11:52.454 UTC" , f );
Run Code Online (Sandbox Code Playgroud)
zdt.toString():2003-06-13T23:11:52.454Z [UTC]
我不建议将日期时间值作为从纪元开始计算.这样做会使调试变得棘手,因为人类无法从数字中辨别出有意义的日期时间,因此无效/意外值可能会漏掉.此类计数也是模糊的,粒度(整秒,毫秒,微米,纳米等)和时期(各种计算机系统中至少二十几个).
但是,如果你坚持,你可以从UTC(1970-01-01T00:00:00
)的1970年第一时刻到整个Instant
班级获得毫秒数.请注意,这意味着数据丢失,因为您将任何纳秒缩短为毫秒.
Instant instant = zdt.toInstant ();
Run Code Online (Sandbox Code Playgroud)
instant.toString():2003-06-13T23:11:52.454Z
long millisSinceEpoch = instant.toEpochMilli() ;
Run Code Online (Sandbox Code Playgroud)
1055545912454
该java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.util.Date
,Calendar
,和SimpleDateFormat
.
要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.规范是JSR 310.
现在处于维护模式的Joda-Time项目建议迁移到java.time类.
您可以直接与数据库交换java.time对象.使用符合JDBC 4.2或更高版本的JDBC驱动程序.不需要字符串,不需要课程.java.sql.*
从哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval
,YearWeek
,YearQuarter
,和更多.
归档时间: |
|
查看次数: |
108291 次 |
最近记录: |