繁体   English   中英

如何将timestamp字符串转换为java.util.Date

[英]how to convert timestamp string to java.util.Date

我需要将时间戳字符串转换为java.util.Date 例如:

MMDDYYHHMMSSMM-DD-YY HH-MM-SS

MM是月份, DD是日期, YY是年份, HH是小时, MM是分钟, SS是秒。

可以这样做:

DateFormat format = new SimpleDateFormat("MMddyyHHmmss");
Date date = format.parse("022310141505");

但我强烈建议你改用Joda Time 这是一个更好的日期/时间库,很长很长的路要走。 特别是,Joda Time中的格式化程序/解析器是线程安全的,因此您可以自由地和静态地重用它们; java.text.SimpleDateFormat 不是线程安全的,因此您需要为每个线程创建一个或使用synchronized块序列化对它的访问。

TL;博士

java.time.LocalDateTime.parse(
    "012318123456" ,
    DateTimeFormatter.ofPattern( "MMdduuHHmmss" )
).format( 
    DateTimeFormatter.ofPattern( "MM-dd-uu HH-mm-ss" )
)

01-23-18 12-34-56

java.time

现代方法使用java.time类。

定义格式模式以匹配输入字符串。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMdduuHHmmss" ) ;

您的两位数年份将被解释为21世纪(20xx)。

解析为LocalDateTime因为您的输入字符串缺少任何时区指示符或与UTC的偏移量。

LocalDateTime ldt = LocalDateTime.parse( "012318123456" , f ) ;

ldt.toString():2018-01-23T12:34:56

生成所需格式的字符串。

DateTimeFormatter fOut = DateTimeFormatter.ofPattern( "MM-dd-uu HH-mm-ss" ) ;
String output = ldt.format( fOut  );

01-23-18 12-34-56

ISO 8601

由于多种原因,您的两种格式都很糟糕。

序列化日期时间值时,请尽可能使用标准ISO 8601格式。 它们设计实用,易于通过机器解析,易于人类跨文化阅读。

对于诸如你的日期时间,中间的T将日期部分与时间部分分开。

2018-01-23T12:34:56


关于java.time

java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧遗留日期时间类,如java.util.DateCalendarSimpleDateFormat

现在处于维护模式Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参阅Oracle教程 并搜索Stack Overflow以获取许多示例和解释。 规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。 该项目是未来可能添加到java.time的试验场。 您可以在这里找到一些有用的类,比如IntervalYearWeekYearQuarter ,和更多

使用带有适当格式字符串的SimpleDateFormat (小心使用正确的格式字母,大写和小写有不同的含义!)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM