2010-02-23 107 views

回答

28

可以像这样做:

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

,但我会强烈建议您使用Joda Time代替。这是一个更好的日期/时间图书馆。尤其是,Joda Time中的格式化器/解析器是线程安全的,因此您可以自由地静态重用它们; java.text.SimpleDateFormat不是线程安全的,因此您需要为每个线程创建一个或使用​​块对其进行序列化访问。

+0

温柔的请求。请您举一个例子。 – Manu 2010-02-23 14:25:08

+2

他已经做了? – BalusC 2010-02-23 14:28:10

+1

我想他是指使用乔达时间的例子... – Fortega 2010-02-23 14:41:18

1

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

+0

温和的请求。你可以举一个例子。 – Manu 2010-02-23 14:24:53

+0

如何使用JSTL标签来转换上述内容 – Manu 2010-02-23 15:50:49

0

TL;博士

java.time.LocalDateTime.parse(
    "" , 
    DateTimeFormatter.ofPattern("MMdduuHHmmss") 
).format( 
    DateTimeFormatter.ofPattern("MM-dd-uu HH-mm-ss") 
) 

18年1月23日12-34-56

java.time

现代的方法使用java.time类。

定义格式模式以匹配您的输入字符串。

DateTimeFormatter f = DateTimeFormatter.ofPattern("MMdduuHHmmss") ; 

您的两位数年份将被解释为21世纪(20xx)。

解析为LocalDateTime,因为您的输入字符串缺少任何时区或UTC偏移的指示符。

LocalDateTime ldt = LocalDateTime.parse("" , f) ; 

ldt.toString():2018-01-23T12:34:56

生成在所期望的格式的字符串。

DateTimeFormatter fOut = DateTimeFormatter.ofPattern("MM-dd-uu HH-mm-ss") ; 
String output = ldt.format(fOut ); 

18年1月23日12-34-56

ISO 8601

你的两种格式是可怕的,出于多种原因。

当序列化日期时间值时,尽可能使用标准ISO 8601格式。它们被设计成实用,易于通过机器进行分析,便于人类跨文化阅读。

对于日期时间(例如您的日期时间),中间的T将日期部分与时间部分分隔开。

2018-01-23T12:34:56


关于java.time

java.time框架是建立在Java 8和更高版本。这些类代替了日期 - 时间类legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time项目,现在在maintenance mode,建议迁移到java.time类。请参阅Oracle Tutorial。并搜索堆栈溢出了很多例子和解释。规格是JSR 310

从何处获取java.time类?

ThreeTen-Extra项目与其他类扩展java.time。这个项目是未来可能增加java.time的一个试验场。您可以在这里找到一些有用的类,如Interval,YearWeek,YearQuartermore

相关问题