2011-03-02 85 views

回答

5

這個怎麼樣:

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

+0

感謝您的回答,它確實工作:) – 2011-03-02 22:36:38

+0

+1的基礎上,它的工作原理,它似乎很容易找出答案,因爲我們不明白的原因! – 2011-03-03 08:16:45

+0

@Tom是的,Java日期API是可怕的,但我相信一個沒有外部庫的工作答案是必須的(儘管我更喜歡Jon Skeet的答案) – 2011-03-03 08:25:47

6

就個人而言,我會使用Joda Time時間解析到LocalTime,並補充說,到今天的LocalDate獲得LocalDateTime,然後轉換這爲Instant使用任何時區,你有興趣。(或者使用LocalTime.toDateTimeToday(DateTimeZone)。)

然後,只需使用Timestamp(long)構造函數創建一個時間戳。

還有很多其他方法(例如,使用SimpleDateFormat而不是使用Joda Time進行解析,如果您真的需要...),但最終您最終可能需要構造函數Timestamp(long)。 (這裏使用約達時間的好處是很明顯什麼東西被代表在每一個階段 - 你不是想「唯一的一次」治療的「日期和時間」,反之亦然)

0
String str = "14:21:16"; 
DateFormat formatter = new SimpleDateFormat("HH:mm:ss"); 
Date date = formatter.parse(str); 
Timestamp timestamp = new Timestamp(date.getTime()); 
+0

檢查'System.out.println(timestamp)'顯示什麼,你會看到那不是今天的日期。 – 2011-03-02 16:44:17

1

使用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()); 
+0

+1爲更好的獲取時間值今天,雖然它需要org.apache.commons.lang.time.DateUtils – 2011-03-02 16:43:46

+0

那麼,你也可以'long millisToday = new Date()。getTime()/ 86400000; // 86400000每天的毫秒數 – Thomas 2011-03-02 16:53:43

+0

順便說一句,apache commons-lang庫提供了許多有用的實用程序,您可以在使用它時讓您的生活更輕鬆。 – Thomas 2011-03-02 17:01:51

4

盡我所能想出了使用標準的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。

+0

感謝您的回答,我的確對使用標準API的解決方案感興趣。 – 2011-03-02 22:36:14

+0

完全有效的答案,它不好不是你的錯:-)(+1) – 2011-03-03 08:27:31