2010-11-01 264 views
2

我試圖將字符串格式化爲日期。如何將日期字符串格式化爲期望的日期格式

爲此,我已經寫了代碼: -

Calendar cal = Calendar.getInstance(); 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
System.out.println(sdf.format(cal.getTime())); 

這是很好.. 但現在我想將字符串轉換成格式化像上面的日期.. 例如

String dt="2010-10-22"; 

和輸出應該是這樣的: - 2010-10-22T00:00:00

我該怎麼辦呢?

+1

你有沒有嘗試在看看其他答案在stackoverflow?例如http://stackoverflow.com/questions/3487898/how-to-parse-follow-date-in-java – 2010-11-01 08:40:33

回答

5
String dt = "2010-10-22"; 

SimpleDateFormat sdfIn = new SimpleDateFormat("yyyy-MM-dd"); 
ParsePosition ps = new ParsePosition(0) 
Date date = sdfIn.parse(dt, pos) 

SimpleDateFormat sdfOut = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 

System.out.println(sdfOut.format(date)); 
+0

感謝它的工作... – 2010-11-01 08:50:06

+1

你不需要'新的ParsePosition(0)'。只需調用'sdfIn。解析(dt)',它默認爲第一個位置。 – 2010-11-01 14:49:59

2

這應該爲你做,記得把它包在一個try-catch塊以防萬一。

DateFormat dt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
try 
{ 
Date today = dt.parse("2010-10-22T00:00:00");      
System.out.println("Your Date = " + dt.format(today));  
} catch (ParseException e)  
{ 
//This parse operation may not be successful, in which case you should handle the ParseException that gets thrown. 
//Black Magic Goes Here 
} 
+0

「以防萬一」是什麼?我不喜歡通過打印堆棧跟蹤來「處理」異常的代碼示例,因爲它們似乎可以正常工作,但完全消除了解決方案中非常重要的一部分。最好不要編寫catch塊,至少編譯器會強制用戶**想**關於如何處理異常。爲此,我寧願你的回答提到可以拋出ParseException,並且應該適當地處理*。 – 2010-11-01 08:47:25

+0

感謝您的回答,但我認爲大衛的回答更好 – 2010-11-01 08:50:53

+0

我很高興您找到您的答案!在代碼片段中打印堆棧跟蹤時,我沒有發現任何固有的危險。上帝憐憫任何直接從互聯網複製代碼並逐字部署的開發人員。跟蹤是在那裏,以便開發人員停下來思考,但也有一個開始找出問題的出發點。如果您需要編譯器來強制開發人員查看他的代碼,那麼出現嚴重錯誤。當然只是我的意見! – JonVD 2010-11-01 08:56:22

0

您使用日期的格式化輸出相同的類也可以用來分析輸入的日期。

要使用例如,解析樣品日期(即小時,分鐘等)

String dt = "2010-10-22"; 
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd"); 
System.out.println(dateFormatter.parse(dt)); 

未指定的字段將是0。因此,您可以使用相同的代碼格式化輸出日期。

1

如果你的輸入將是ISO,你也可以看看使用的Joda Time API,像這樣:

LocalDateTime localDateTime = new LocalDateTime("2010-10-22"); 
System.out.println("Formatted time: " + localDateTime.toString()); 
+0

謝謝它真的會採用ISO格式 – 2010-11-01 09:06:16