当前位置:  开发笔记 > 编程语言 > 正文

重置Java中时间戳的时间部分

如何解决《重置Java中时间戳的时间部分》经验,为你挑选了3个好方法。

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

在T-SQL中,此查询将实现相同的目标,但我不知道如何在Java中执行此操作.

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



1> Alex Miller..:

你可以去Date-> Calendar-> set-> Date:

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字段.当然,日历对nanos一无所知,因此会盲目地忽略它并在最后创建zeroedDate时有效地删除它,然后您可以使用它创建一个新的Timetamp对象.

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


说真的,谁曾经命名过Date?这是一个时间戳.

2> ScArcher2..:

如果你正在使用公共场所,你可以打电话DateUtils.truncate.这是javadoc文档.

@Alex Miller说这样做也是如此.



3> thoroughly..:

假设您的"timestamp"是一个java.util.Date,它表示为自纪元开始(1970年1月1日)以来的毫秒数,您可以执行以下算术:

public static Date stripTimePortion(Date timestamp) {
    long msInDay = 1000 * 60 * 60 * 24; // Number of milliseconds in a day
    long msPortion = timestamp.getTime() % msInDay;
    return new Date(timestamp.getTime() - msPortion);
}

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有