2011-03-16 103 views
1

我有一個java.sql.Timestamp,我想截斷日期並以12小時的方式顯示它,例如(18 :42下午6點42分)如何將java.sql.Timestamp格式化爲(hh:mm AM/PM)

我想:

public static String formatTimestampAsTwelveHour(java.sql.Timestamp stamp){ 

     String stampString = stamp.toString(); 
     String hms = stampString.split(" ")[1]; 
     String[] hmsArray = hms.split(":"); 
     int hours = Integer.parseInt(hmsArray[0]); 
     int minutes = Integer.parseInt(hmsArray[1]); 
     int seconds = Integer.parseInt(hmsArray[2]);//just in case someone wants seconds 

     String suffix = ""; 
     if (hours > 12){ 
      hours = hours -12; 
      suffix = "PM"; 
     }else if (hours == 12){ 
      suffix = "PM"; 
     }else{ 
      suffix = "AM"; 
     } 
     String lessThanTen = ""; 
     if (minutes<10){ 
      lessThanTen = "0"; 
     } 
     return String.format("%i:%s%i %s", hours, lessThanTen,minutes, suffix); 

} 

我得到(例外在線程 「主題-14」 java.lang.NumberFormatException:對於輸入字符串: 「06.0」),但我從來沒有放棄它是一個十進制數。

回答

11

SimpleDateFormat一個子類,你想要做什麼。

DateFormat format = new SimpleDateFormat("h:mm a"); 
String str = format.format(timestamp); 

編輯:其他人發佈的格式爲「K」的版本將在0-11之間返回小時。這將返回1-12,這更可能是你想要的。

+2

+1用於鏈接到Javadocs – 2011-03-16 17:59:49

2

你並不需要自己解析它,你可以使用SimpleDateFormat"h:mm a"因爲它是java.util.Date

2
public static String formatTimestampAsTwelveHour(java.sql.Timestamp stamp){ 

     java.util.Date date = new Date(stamp.getTime()); 
     SimpleDateFormat format = new SimpleDateFormat("your format here"); 
     return format.format(date); 

} 

的Java已經提供日期格式化程序,賠率是他們是比什麼,你會分別煮了更好更快的實現。

此外,您確實需要從Timestamp的毫秒值創建一個java.util.Date,因爲在特定的實現中,當您嘗試通過它的Date父類來格式化Timestamp時,我注意到了幾毫秒時發生的奇怪事情。

+1

'java.sql.Timestap' *是一個'java.util.Date',不需要構造一個新的對象。 – Jonathan 2011-03-16 18:01:07

+2

你還沒有使用足夠的時間戳。由於時間戳和日期的細微差異,我有很多實例,其中身份,hashcode和等於失敗。這就是爲什麼我現在從提供給我的每個時間戳中構建一個日期。 – 2011-03-16 18:02:39

+0

是的,我只用過時間戳。 – davidahines 2011-03-16 18:05:30

相關問題