我有一大堆的日期在這個字符串格式:任何簡單的方法來格式化日期?
String date = "Wed Sep 15 16:31:05 BST 2010";
,我想將其轉換回一個日期或日曆對象。在我開始重新發明輪子之前,有沒有簡單的方法可以做到這一點,最好在JDK中提供?
我有一大堆的日期在這個字符串格式:任何簡單的方法來格式化日期?
String date = "Wed Sep 15 16:31:05 BST 2010";
,我想將其轉換回一個日期或日曆對象。在我開始重新發明輪子之前,有沒有簡單的方法可以做到這一點,最好在JDK中提供?
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別名。
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); }
}
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);
嗯,這就是java.text.DateFormat
是(尤其是其SimpleDateFormat
子類) - 但我個人建議你使用Joda Time代替。
尤其是Joda時間的DateTimeFormatter
類是線程安全的,不像SimpleDateFormat
- 因此您可以使用適當的模式創建單個實例,並從任何線程使用它。此外,DateTimeFormat
課程在ISODateFormat
中充當具有許多預設模式的工廠。哦,並控制時區等與喬達時間相比更好。
最後,喬達時間只是一個更好的日期和時間API。這不是完美的,但它的很多比內置的Date
和Calendar
支持Java。
編輯:試圖分析您的示例字符串,我遇到了「BST」位的問題......部分原因是因爲這不是一個完整的時區(它只是DST歐洲/倫敦時區的一部分)部分原因是因爲我不能完全得到約達時間做我想做什麼?它看起來像在這個情況下,SimpleDateFormat
勝出:(
令人驚歎的是,我從來沒有見過JodaTime與JDK日期處理相比不足!感謝您的完整答案,非常有幫助。 – 2010-09-24 11:36:35
針對yoda提示的Thx - 很高興知道它存在! – david 2010-09-24 12:03:09
只是一個精度,「unformatting」被稱爲「解析」:-) – 2010-09-24 10:47:51
@Vivien Barousse - 哈哈,每天學習新東西:) – 2010-09-24 11:38:35