2010-09-24 47 views
3

我有一大堆的日期在這個字符串格式:任何簡單的方法來格式化日期?

String date = "Wed Sep 15 16:31:05 BST 2010"; 

,我想將其轉換回一個日期或日曆對象。在我開始重新發明輪子之前,有沒有簡單的方法可以做到這一點,最好在JDK中提供?

+3

只是一個精度,「unformatting」被稱爲「解析」:-) – 2010-09-24 10:47:51

+0

@Vivien Barousse - 哈哈,每天學習新東西:) – 2010-09-24 11:38:35

回答

7

使用SimpleDateFormat

String format = "EE MMM dd HH:mm:ss zz yyyy"; 
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.US); 
Date result = sdf.parse(date); 

另外,通過將建議Jon Skeet,你可以使用JodaTime的DateTimeFormat - 模式應該是一樣的,但是看起來BDT/BST/BDST ti JodaTime不支持mezone別名。

+0

應該是'HH'而不是'hh'。 – dogbane 2010-09-24 10:50:34

+0

當然,謝謝,修正。 – Bozho 2010-09-24 10:52:22

+0

@Bozho:?不幸的是,它看起來像約達時間不處理解析時區:( – 2010-09-24 10:57:44

1

SimpleDateFormat

public static void main(String[] args) { 
try { String str_date="11-June-07"; 
     DateFormat formatter ; 
    Date date ; 
      formatter = new SimpleDateFormat("dd-MMM-yy"); 
       date = (Date)formatter.parse(str_date);  
       System.out.println("Today is " +date); 
    } catch (ParseException e) 
    {System.out.println("Exception :"+e); }  

    } 

JodaTime

import org.joda.time.format.*; 
import org.joda.time.*; 

...  

String dateString = "2009-04-17 10:41:33"; 

// parse the string 
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); 
DateTime dateTime = formatter.parseDateTime(dateString); 

// add two hours 
dateTime = dateTime.plusHours(2); // easier than mucking about with Calendar and constants 

System.out.println(dateTime); 
3

嗯,這就是java.text.DateFormat是(尤其是其SimpleDateFormat子類) - 但我個人建議你使用Joda Time代替。

尤其是Joda時間的DateTimeFormatter類是線程安全的,不像SimpleDateFormat - 因此您可以使用適當的模式創建單個實例,並從任何線程使用它。此外,DateTimeFormat課程在ISODateFormat中充當具有許多預設模式的工廠。哦,並控制時區等與喬達時間相比更好。

最後,喬達時間只是一個更好的日期和時間API。這不是完美的,但它的很多比內置的DateCalendar支持Java。

編輯:試圖分析您的示例字符串,我遇到了「BST」位的問題......部分原因是因爲這不是一個完整的時區(它只是DST歐洲/倫敦時區的一部分)部分原因是因爲我不能完全得到約達時間做我想做什麼?它看起來像在這個情況下,SimpleDateFormat勝出:(

+0

令人驚歎的是,我從來沒有見過JodaTime與JDK日期處理相比不足!感謝您的完整答案,非常有幫助。 – 2010-09-24 11:36:35

+0

針對yoda提示的Thx - 很高興知道它存在! – david 2010-09-24 12:03:09