2011-03-02 93 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