我需要将时间戳字符串转换为java.util.Date
。 E.g:
MMDDYYHHMMSS
至MM-DD-YY HH-MM-SS
MM
为月份,DD
为日期,YY
为年,HH
为小时,MM
为分钟,SS
为秒。
答案 0 :(得分:28)
你可以这样做:
DateFormat format = new SimpleDateFormat("MMddyyHHmmss");
Date date = format.parse("022310141505");
但我强烈建议您改用Joda Time。这是一个更好的日期/时间库,很长很长的路要走。特别是,Joda Time中的格式化程序/解析器是线程安全的,因此您可以自由地和静态地重用它们; java.text.SimpleDateFormat
不是线程安全的,因此您需要为每个线程创建一个或使用synchronized
块序列化对它的访问。
答案 1 :(得分:2)
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 类。
定义格式化模式以匹配您的输入字符串。
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格式。它们设计实用,易于通过机器解析,易于被不同文化的人阅读。
对于像你这样的日期时间,中间的T
将日期部分与时间部分分开。
2018-01-23T12:34:56
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。
答案 2 :(得分:1)
使用带有适当格式字符串的SimpleDateFormat(注意使用正确的格式字母,大写和小写有不同的含义!)。