如何将timestamp字符串转换为java.util.Date
我需要将时间戳字符串转换为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 。 这是一个更好的日期/时间库,很长很长的路要走。 特别是,Joda Time中的格式化程序/解析器是线程安全的,因此您可以自由地和静态地重用它们; java.text.SimpleDateFormat
不是线程安全的,因此您需要为每个线程创建一个或使用synchronized
块序列化对它的访问。
使用带有适当格式字符串的SimpleDateFormat (小心使用正确的格式字母,大写和小写有不同的含义!)。
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.Date
, Calendar
和SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle教程 。 并搜索Stack Overflow以获取许多示例和解释。 规范是JSR 310 。
从哪里获取java.time类?
- Java SE 8 , Java SE 9及更高版本
- 内置。
- 带有捆绑实现的标准Java API的一部分。
- Java 9增加了一些小function和修复。
- Java SE 6和Java SE 7
- 许多java.timefunction都被反向移植到ThreeTen-Backport中的 Java 6和7。
- Android的
- 更高版本的Android捆绑java.time类的实现。
- 对于早期的Android, ThreeTenABP项目采用ThreeTen-Backport (如上所述)。 请参见如何使用ThreeTenABP ….
ThreeTen-Extra项目使用其他类扩展了java.time。 该项目是未来可能添加到java.time的试验场。 您可以在这里找到一些有用的课程,如Interval
, YearWeek
, YearQuarter
等。