java - 如何找到午夜过后最快的 Java 日期?

标签 java date calendar

假设我有一个日期对象标记为 2013 年 2 月 13 日晚上 11 点。我试图在凌晨 3 点获取下一个最快的日期对象。因此在本例中,时间为 2013 年 2 月 14 日凌晨 3 点。

我可以简单地通过在日期字段中添加 1 天并将时间设置为凌晨 3:00 来完成此操作,但以下情况又如何:

我有一个日期对象,标记为 2013 年 2 月 14 日凌晨 1 点。在这里,我不需要添加一天,而只需设置时间。

有没有一种优雅的方式来做到这一点?下面是我到目前为止所做的,我认为这会起作用,但我只是想知道是否有一个 api 可以让这变得更容易。像 getNextSoonestDate() 之类的东西

Calendar calendar = Calendar.getInstance();

//myDate is some arbitrary date, like one of the examples posted above (i.e. feb 13th 11pm)
calendar.setTime(myDate);

//set the calender to be 3am
calendar.set(Calendar.HOUR_OF_DAY, 3);

//check if this comes before my current date, if so we know we need to add a day
if (calendar.getTime().before(myDate)){
    calendar.add(Calendar.DAY_OF_YEAR, 1);
}

最佳答案

我不认为有一个预先编写的方法可以完成您想做的事情,但是编写实用方法非常简单。

话虽如此,您的代码很接近,但如果 myDate 介于 3:00:00.0013:59:59.999 之间,则无法正常工作code> (在这种情况下,我假设您希望它返回第二天发生的情况)——您需要将不太重要的字段清零:

public static Date getNextTime(Date base, int hourOfDay) {
    Calendar then = Calendar.getInstance();
    then.setTime(base);
    then.set(Calendar.HOUR_OF_DAY, hourOfDay);
    then.set(Calendar.MINUTE, 0);
    then.set(Calendar.SECOND, 0);
    then.set(Calendar.MILLISECOND, 0);
    if (then.getTime().before(base)) {
        then.add(Calendar.DAY_OF_YEAR, 1);
    }
    return then.getTime();
}

Date nextOccurrenceOf3am = getNextTime(myDate, 3);

关于java - 如何找到午夜过后最快的 Java 日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14858207/

相关文章:

ruby - 如何从日数和年份获取日期?

php - 如何在mysql中求和不同的值

javascript - 闰年功能不起作用

c - 如何设计和实现触发 C 语言部分代码的可调度警报/事件

iphone - 将日期和时间组合成单个 NSDate 的问题

java - 单元测试时的 NPE

java - 将 log4j 1.2 配置转换为 log4j 2 配置

java - 如何在 Hibernate 不生成任何表的情况下使用 Hibernate Envers (@Audited)

java - 嵌套 JSON 的问题

php - 24 小时格式的日期和时间