我正在使用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