2010-08-17 151 views

回答

102

使用SimpleDateFormat在日期字符串和實際對象之間進行轉換。以Date爲起點,您可以輕鬆應用基於SimpleDateFormat的javadoc中定義的各種模式的格式(單擊Javadoc的藍色代碼鏈接)。

這裏有一個開球例如:

String originalString = "2010-07-14 09:00:02"; 
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(originalString); 
String newString = new SimpleDateFormat("H:mm").format(date); // 9:00 
+0

嗨它也可以格式化它在幾個小時:分鐘,如果我有一個unixtimestamp如:1279080000? 我嘗試了以前的帖子,但沒有幫助。 謝謝 – JJunior 2010-08-17 17:20:55

+0

你可以用毫秒來構造一個帶有時間戳的新Date對象,然後對它進行格式化。如果你實際上是從數據庫中獲取數據,你應該使用ResultSet#getTimestamp()來得到一個'Date',如[你之前的問題之一]中回答的那樣(http://stackoverflow.com/questions/3473421/) 。或者甚至更好,利用SQL內置的日期/時間函數來返回已經使用所需格式的時間戳,從而不需要在Java中重新編寫每行數據的昂貴任務。在這種情況下,只需通過ResultSet#getString()'獲得小時。使用正確的工具進行作業 – BalusC 2010-08-17 17:22:40

+1

我從數據庫中獲取它。 但需要生成打印報告。我以爲我可以迭代這些值並在運行中改變它們。 因爲我需要在最後打印出來。無法以任何starightforward方式完成:( – JJunior 2010-08-17 18:38:36

3

我假設你的第一個字符串是一個實際的Date對象,請糾正我,如果我錯了。如果是這樣,請使用SimpleDateFormat對象:http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html。格式字符串「h:mm」應該照顧它。

+1

'H:mm'是否更合理? – Joey 2010-08-17 17:09:41

+0

即使字符串最初不是'Date'對象,也可以使用SimpleDateFormat.parse()將它變成一個,根據BalusC的例子 – 2010-08-17 17:10:49

+1

事實上,如果沒有AM/PM標記('a'),你寧願在'h'上面加'H'以避免9:00(AM)到9:00(PM)之間的不確定性。 – BalusC 2010-08-17 17:11:20

2

如果您有日期整數,你可以在這裏使用:

Date date = new Date(); 
date.setYear(2010); 
date.setMonth(07); 
date.setDate(14) 
date.setHours(9); 
date.setMinutes(0); 
date.setSeconds(0); 
String time = new SimpleDateFormat("HH:mm:ss").format(date); 
+1

請解釋您的答案,以使其他讀者更清楚。 – 2015-06-23 13:03:05

+1

我已經更新了它 – 2015-06-23 16:10:31

+0

如果您因爲某種原因而喜歡八月,可能會使用07,但請注意08或09在九月或十月不適用。 0前綴表示數字是八進制數。 – 2017-05-03 19:57:09

0
let datestring = "2017-02-14 02:16:28" 

let formatter = DateFormatter() 
formatter.dateStyle = DateFormatter.Style.full 
formatter.timeStyle = DateFormatter.Style.full 

formatter.dateFormat = "yyyy-MM-dd hh:mm:ss" 

let date = formatter.date(from: datestring) 
let date2 = formatter.String(from: date) 
+1

。 – 2017-05-04 05:33:08

2

其他答案是問這個問題時的好答案。時間繼續,DateSimpleDateFormat被更新的更好的類取代,並停用。在2017年,使用的類中java.time包:

String timeString = LocalDateTime.parse(dateString, DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss")) 
      .format(DateTimeFormatter.ofPattern("H:mm")); 

結果是所期望的,9:00