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

时间:2010-02-23 14:12:37

标签: java

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

MMDDYYHHMMSSMM-DD-YY HH-MM-SS

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

3 个答案:

答案 0 :(得分:28)

可以这样做:

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

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

答案 1 :(得分:2)

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及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 2 :(得分:1)

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