[英]how to convert timestamp string to 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
块序列化对它的访问。
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及更高版本中。 这些类取代了麻烦的旧遗留日期时间类,如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 (小心使用正确的格式字母,大写和小写有不同的含义!)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.