我正在使用Java 6,並且從當前日期開始有一段時間爲字符串,如下所示:14:21:16
,我需要將其轉換爲Timestamp
object以存儲在數據庫。Java:將時間從今天轉換爲時間戳
但是,似乎沒有好辦法從中獲取時間戳。 Timestamp.valueOf(String)
非常接近,但需要一個日期。有沒有一種很好的方法來從這樣一個字符串中創建一個Timestamp對象?
我正在使用Java 6,並且從當前日期開始有一段時間爲字符串,如下所示:14:21:16
,我需要將其轉換爲Timestamp
object以存儲在數據庫。Java:將時間從今天轉換爲時間戳
但是,似乎沒有好辦法從中獲取時間戳。 Timestamp.valueOf(String)
非常接近,但需要一個日期。有沒有一種很好的方法來從這樣一個字符串中創建一個Timestamp對象?
這個怎麼樣:
final String str = "14:21:16";
final Timestamp timestamp =
Timestamp.valueOf(
new SimpleDateFormat("yyyy-MM-dd ")
.format(new Date()) // get the current date as String
.concat(str) // and append the time
);
System.out.println(timestamp);
輸出:
2011-03-02 14:21:16.0
有一個特定的日子(比如unix epoch?)作爲一天。當你使用它時,只使用你關心的時間參數,忽略一天。
另一種辦法是爲java.sql.Time
http://download.oracle.com/javase/1.4.2/docs/api/java/sql/Time.htm
就個人而言,我會使用Joda Time時間解析到LocalTime
,並補充說,到今天的LocalDate
獲得LocalDateTime
,然後轉換這爲Instant
使用任何時區,你有興趣。(或者使用LocalTime.toDateTimeToday(DateTimeZone)
。)
然後,只需使用Timestamp(long)
構造函數創建一個時間戳。
還有很多其他方法(例如,使用SimpleDateFormat
而不是使用Joda Time進行解析,如果您真的需要...),但最終您最終可能需要構造函數Timestamp(long)
。 (這裏使用約達時間的好處是很明顯什麼東西被代表在每一個階段 - 你不是想「唯一的一次」治療的「日期和時間」,反之亦然)
String str = "14:21:16";
DateFormat formatter = new SimpleDateFormat("HH:mm:ss");
Date date = formatter.parse(str);
Timestamp timestamp = new Timestamp(date.getTime());
檢查'System.out.println(timestamp)'顯示什麼,你會看到那不是今天的日期。 – 2011-03-02 16:44:17
使用org.apache.commons.lang.time.DateUtils:
Date today = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);
DateFormat df = new SimpleDateFormat("HH:mm:ss");
Date time = df.parse("14:21:16");
Timestamp time = new Timestamp(today.getTime() + time.getTime());
盡我所能想出了使用標準的API是不是漂亮:
// Get today's date and time.
Calendar c1 = Calendar.getInstance();
c1.setTime(new Date());
// Get the required time of day, copy year, month, day.
Calendar c2 = Calendar.getInstance();
c2.setTime(java.sql.Time.valueOf("14:21:16"));
c2.set(Calendar.YEAR, c1.get(Calendar.YEAR));
c2.set(Calendar.MONTH, c1.get(Calendar.MONTH));
c2.set(Calendar.DAY_OF_MONTH, c1.get(Calendar.DAY_OF_MONTH));
// Construct required java.sql.Timestamp object.
Timestamp time = new Timestamp(c2.getTimeInMillis());
Let's see what we've done.
System.out.println(time);
注意的java.sql.Time。 valueOf接受您需要的形式爲「HH:MM:SS」的字符串。其他格式將需要使用SimpleDateFormat。
感謝您的回答,我的確對使用標準API的解決方案感興趣。 – 2011-03-02 22:36:14
完全有效的答案,它不好不是你的錯:-)(+1) – 2011-03-03 08:27:31
感謝您的回答,它確實工作:) – 2011-03-02 22:36:38
+1的基礎上,它的工作原理,它似乎很容易找出答案,因爲我們不明白的原因! – 2011-03-03 08:16:45
@Tom是的,Java日期API是可怕的,但我相信一個沒有外部庫的工作答案是必須的(儘管我更喜歡Jon Skeet的答案) – 2011-03-03 08:25:47