如何将时间戳字符串转换为java.util.Date

16

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

MMDDYYHHMMSS转换为MM-DD-YY HH-MM-SS

其中,MM表示月份,DD表示日期,YY表示年份,HH表示小时,MM表示分钟,SS表示秒钟。

3个回答

28

你可以像这样做:

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

但我强烈推荐您使用Joda Time。它是一个更好的日期/时间库,特别是其中的格式化程序/解析器是线程安全的,因此您可以自由静态地重复使用它们;而java.text.SimpleDateFormat则不是线程安全的,因此您需要为每个线程创建一个对象,或者在一个synchronized块中对其进行序列化操作。


温馨请求。能否请您发布一个示例。 - Manu
1
大小写问题的又一受害者 - “S” 表示毫秒。 - Michael Borgwardt
如何使用JSTL标签将上述内容转换 - Manu
@Manu:老实说,我建议你不要从模板标签开始做。 - Jon Skeet

3

懒人摘要

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.Date, CalendarSimpleDateFormat

Joda-Time 项目现已进入维护模式,建议迁移到 java.time 类。

要了解更多信息,请参阅 Oracle教程。在 Stack Overflow 上搜索许多示例和解释。规范为 JSR 310

如何获取 java.time 类?

ThreeTen-Extra项目扩展了java.time的额外类。该项目是java.time可能未来添加内容的试验场。您可能会在这里找到一些有用的类,例如Interval, YearWeek, YearQuarter更多


1

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


温馨提示:能否请您提供一个示例。 - Manu
如何使用JSTL标签将上述内容转换 - Manu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接