2010-02-23 86 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

相關問題