java - 在Java中重置时间戳的时间部分

标签 java sql timestamp

在 Java 中,给定一个时间戳,如何将时间部分单独重置为 00:00:00,以便时间戳代表该特定日期的午夜?

在 T-SQL 中,这个查询可以达到同样的效果,但我不知道如何在 Java 中做到这一点。

SELECT CAST( FLOOR( CAST(GETDATE() AS FLOAT ) ) AS DATETIME) AS 'DateTimeAtMidnight';

最佳答案

你可以去日期->日历->设置->日期:

Date date = new Date();                      // timestamp now
Calendar cal = Calendar.getInstance();       // get calendar instance
cal.setTime(date);                           // set cal to date
cal.set(Calendar.HOUR_OF_DAY, 0);            // set hour to midnight
cal.set(Calendar.MINUTE, 0);                 // set minute in hour
cal.set(Calendar.SECOND, 0);                 // set second in minute
cal.set(Calendar.MILLISECOND, 0);            // set millis in second
Date zeroedDate = cal.getTime();             // actually computes the new Date

我喜欢 Java 约会。

请注意,如果您使用的是实际的 java.sql.Timestamps,它们有一个额外的 nanos 字段。 Calendar 当然,对 nanos 一无所知,因此在最后创建 zeroedDate 时会盲目地忽略它并有效地删除它,然后您可以使用它来创建一个新的 Timetamp 对象。

我还应该注意,Calendar 不是线程安全的,所以不要以为你可以从多个线程调用静态单个 cal 实例以避免创建新的 Calendar 实例。

关于java - 在Java中重置时间戳的时间部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/227007/

相关文章:

java - 如何在 SQLite 数据库中保存 getIntent() 值?

sql - Teradata 在 JOIN 语句中使用 CAST

postgresql - postgres 缺少时间戳列

PHP strtotime() "first monday february"如果 2 月 1 日是星期一,则返回第二个星期一

python - Pandas - 按时间接近加入

java - 设置哈希码并等于创建一个具有唯一对象的集合

java - 使条件忽略大写锁定?

java - 为什么三元运算符会意外地转换整数?

android SQLiteDatabase.Update() 返回 2,为什么?

mysql - 在两个表之间的连接中查找最早的记录