Java:将时间从今天转换为时间戳
我使用的是Java 6,我有一个从当前日期算起的时间作为字符串,如下所示:Java:将时间从今天转换为时间戳,java,timestamp,Java,Timestamp,我使用的是Java 6,我有一个从当前日期算起的时间作为字符串,如下所示:14:21:16,我需要将其转换为存储在数据库中的时间 然而,似乎没有什么好方法可以从中获取时间戳。非常接近,但需要日期。有没有一种好方法可以从这样一个字符串生成一个Timestamp对象?有一个给定的日期(比如说unix epoch?)作为日期。当你使用它时,只使用你关心的时间参数,忽略一天 另一个选项是java.sql.Time 就我个人而言,我会将时间解析为LocalTime,并将其添加到今天的LocalDate中,
14:21:16
,我需要将其转换为存储在数据库中的时间
然而,似乎没有什么好方法可以从中获取时间戳。非常接近,但需要日期。有没有一种好方法可以从这样一个字符串生成一个Timestamp对象?有一个给定的日期(比如说unix epoch?)作为日期。当你使用它时,只使用你关心的时间参数,忽略一天
另一个选项是java.sql.Time
就我个人而言,我会将时间解析为LocalTime
,并将其添加到今天的LocalDate
中,得到LocalDateTime
,然后使用您感兴趣的时区将其转换为即时
。(或使用LocalTime.toDateTimeToday(DateTimeZone)
)
然后使用时间戳(long)
构造函数创建一个时间戳
还有很多其他方法(例如使用SimpleDateFormat
而不是使用Joda-Time进行解析,如果您真的需要…),但最终您可能需要Timestamp(long)
构造函数。(在这里使用Joda Time的好处是,很明显每个阶段所代表的是什么——你没有试图将“时间”视为“日期和时间”,反之亦然。)这样如何:
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
使用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”的字符串。其他格式需要使用SimpleDataFormat。+1以更简洁的方式获取今天开始的时间值,尽管它确实需要org.apache.commons.lang.time.DateUtilsWell,但您也可以使用
long millisToday=new Date().getTime()/86400000//86400000每天的毫秒数
顺便说一句,apache commons lang库提供了许多有用的实用程序,使用它可以让您的生活更加轻松。这种方法真的能给出正确的答案吗?(原始版本)如果我尝试的话,我会有一个小时的休息时间,而我现在是格林尼治标准时间(GMT)。我不明白为什么现在我的纪元(System.out.println(新日期(0)))会在1970年1月1日返回凌晨1点,因此我会休息一小时。我遗漏了什么吗?检查一下System.out.println(timestamp)
显示的内容,你会发现这不是今天的日期。感谢你的回答,我确实对一个仅使用标准API的解决方案感兴趣。完全有效的回答,这不是你的错:-)(+1)+1基于它的工作原理,而且,似乎很容易找到答案,因为我们不理解的原因,答案是不正确的@Tom是的,Java date API很糟糕,但我相信没有外部库的工作答案是必须的(尽管我更喜欢Jon Skeet的答案)
// 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);