我需要将时间戳字符串转换为java.util.Date
。例如:
MMDDYYHHMMSS
转换为MM-DD-YY HH-MM-SS
其中,MM
表示月份,DD
表示日期,YY
表示年份,HH
表示小时,MM
表示分钟,SS
表示秒钟。
我需要将时间戳字符串转换为java.util.Date
。例如:
MMDDYYHHMMSS
转换为MM-DD-YY HH-MM-SS
其中,MM
表示月份,DD
表示日期,YY
表示年份,HH
表示小时,MM
表示分钟,SS
表示秒钟。
你可以像这样做:
DateFormat format = new SimpleDateFormat("MMddyyHHmmss");
Date date = format.parse("022310141505");
但我强烈推荐您使用Joda Time。它是一个更好的日期/时间库,特别是其中的格式化程序/解析器是线程安全的,因此您可以自由静态地重复使用它们;而java.text.SimpleDateFormat
则不是线程安全的,因此您需要为每个线程创建一个对象,或者在一个synchronized
块中对其进行序列化操作。
java.time.LocalDateTime.parse(
"012318123456" ,
DateTimeFormatter.ofPattern( "MMdduuHHmmss" )
).format(
DateTimeFormatter.ofPattern( "MM-dd-uu HH-mm-ss" )
)
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMdduuHHmmss" ) ;
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格式。它们被设计为实用、易于机器解析、易于跨文化人类阅读。
对于像你提供的日期时间,中间的T
将日期部分与当天时间部分分开。
2018-01-23T12:34:56
Java.time 框架内置于 Java 8 及以后版本。这些类替代了老旧且令人头疼的传统日期时间类,例如 java.util.Date
, Calendar
和 SimpleDateFormat
。
Joda-Time 项目现已进入维护模式,建议迁移到 java.time 类。
要了解更多信息,请参阅 Oracle教程。在 Stack Overflow 上搜索许多示例和解释。规范为 JSR 310。
如何获取 java.time 类?
ThreeTen-Extra项目扩展了java.time的额外类。该项目是java.time可能未来添加内容的试验场。您可能会在这里找到一些有用的类,例如Interval
, YearWeek
, YearQuarter
和更多。
使用SimpleDateFormat和适当的格式字符串(注意使用正确的格式字母,大小写有不同的含义!)。