22

我现在有时间:

new Date();

我有一些小时常数,例如238(晚上 11 点或 23:00、上午 8 点或 08:00)。我怎么知道现在是两个小时常数之间的时间?

如果现在时间在两个小时之间,它需要运行一些程序代码或不运行,例如,如果已经是晚上并且不是早上,则不要运行一些代码。

这里的图像可以更好地解释:

在此处输入图像描述

静音模式不触发的一些情况:

00:00 20.06.13 - 23:00 20.06.13 // after 23.00 can loud!!

23:00 20.06.13 - 15:00 20.06.13 // after 15.00 can loud!!

01:00 20.06.13 - 08:00 20.06.13 // after 08.00 can loud!!

21:00 20.06.13 - 08:00 20.06.13 // after 08.00 can loud!!
4

8 回答 8

34

尝试这个

    int from = 2300;
    int to = 800;
    Date date = new Date();
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    int t = c.get(Calendar.HOUR_OF_DAY) * 100 + c.get(Calendar.MINUTE);
    boolean isBetween = to > from && t >= from && t <= to || to < from && (t >= from || t <= to);
于 2013-06-20T12:07:06.680 回答
15
Calendar cal = Calendar.getInstance(); //Create Calendar-Object
cal.setTime(new Date());               //Set the Calendar to now
int hour = cal.get(Calendar.HOUR_OF_DAY); //Get the hour from the calendar
if(hour <= 23 && hour >= 8)              // Check if hour is between 8 am and 11pm
{
     // do whatever you want
}
于 2013-06-20T11:53:38.347 回答
10
于 2015-01-05T18:34:17.877 回答
7

我认为这是更清洁的解决方案,并且有效。我已经用不同的时间参数对其进行了测试。

        /**
         * @param fromHour Start Time
         * @param toHour Stop Time
         * @param now Current Time
         * @return true if Current Time is between fromHour and toHour
         */
        boolean isTimeBetweenTwoHours(int fromHour, int toHour, Calendar now) {
            //Start Time
            Calendar from = Calendar.getInstance();
            from.set(Calendar.HOUR_OF_DAY, fromHour);
            from.set(Calendar.MINUTE, 0);
            //Stop Time
            Calendar to = Calendar.getInstance();
            to.set(Calendar.HOUR_OF_DAY, toHour);
            to.set(Calendar.MINUTE, 0);

            if(to.before(from)) {
                if (now.after(to)) to.add(Calendar.DATE, 1);
                else from.add(Calendar.DATE, -1);
            }
            return now.after(from) && now.before(to);
        }
于 2016-12-21T20:14:06.373 回答
2

你可以在这里看到一个教程 ,Date.before你可以用Date.after

您也可以获取他的毫秒数并进行比较。

于 2013-06-20T11:54:20.767 回答
1

这是一个检查现在(当前时间)是否在 1 到 4 或 4 到 8 或 8 到 12 或 12 到 16 或 16 到 20 或 20 到 1 之间的函数,并返回下一个计算时间。

private Calendar GetTimeDiff() throws ParseException {
    Calendar now = Calendar.getInstance();

    Calendar one = Calendar.getInstance();
    one.set(Calendar.HOUR_OF_DAY, 1);
    one.set(Calendar.MINUTE, 0);
    one.set(Calendar.SECOND, 0);

    Calendar four = Calendar.getInstance();
    four.set(Calendar.HOUR_OF_DAY, 4);
    four.set(Calendar.MINUTE, 0);
    four.set(Calendar.SECOND, 0);

    Calendar eight = Calendar.getInstance();
    eight.set(Calendar.HOUR_OF_DAY, 8);
    eight.set(Calendar.MINUTE, 0);
    eight.set(Calendar.SECOND, 0);

    Calendar twelve = Calendar.getInstance();
    twelve.set(Calendar.HOUR_OF_DAY, 12);
    twelve.set(Calendar.MINUTE, 0);
    twelve.set(Calendar.SECOND, 0);

    Calendar sixteen = Calendar.getInstance();
    sixteen.set(Calendar.HOUR_OF_DAY, 16);
    sixteen.set(Calendar.MINUTE, 0);
    sixteen.set(Calendar.SECOND, 0);

    Calendar twenty = Calendar.getInstance();
    twenty.set(Calendar.HOUR_OF_DAY, 20);
    twenty.set(Calendar.MINUTE, 0);
    twenty.set(Calendar.SECOND, 0);

    if(now.getTime().after(one.getTime()) && now.getTime().before(four.getTime())) {
        return four;
    }

    if(now.getTime().after(four.getTime()) && now.getTime().before(eight.getTime())) {
        return eight;
    } 

    if(now.getTime().after(eight.getTime()) && now.getTime().before(twelve.getTime())) {
        return twelve;
    } 

    if(now.getTime().after(twelve.getTime()) && now.getTime().before(sixteen.getTime())) {
        return sixteen;
    } 

    if(now.getTime().after(sixteen.getTime()) && now.getTime().before(twenty.getTime())) {
        return twenty;
    } 

    if(now.getTime().after(twenty.getTime()) && now.getTime().before(one.getTime())) {
        return one;
    }

    return now;
}
于 2017-06-14T06:45:50.943 回答
0

PHP解决方案

我无法在 PHP 中找到解决方案,但 @sytolk 的回答有所帮助。继承人PHP版本。

// $current = Date('H:i:s');
$current = "01:00:00";
$start = "23:00:00";
$end = "02:00:00";

$current = DateTime::createFromFormat('H:i:s', $current);
$start = DateTime::createFromFormat('H:i:s', $start);
$end = DateTime::createFromFormat('H:i:s', $end);

if ($end < $start) {
    if ($current > $end) {
        $end->modify('+1 day');
    } else {
        $start->modify('-1 day');
    }
}

$inTime = $current > $start && $current < $end;
于 2020-10-06T10:29:15.483 回答
-1

您还可以将输入字符串转换为整数并将其与常量进行比较。这样,您甚至不需要使用 Calendar 和 Date 对象。

public class testDateRange {

    static final int START_HOUR = 8;
    static final int END_HOUR = 23;

    public static void main(String[] args) {
        String now_time = new SimpleDateFormat("HH:mm").format(new Date());
        System.err.println(isInRange(Integer.parseInt(now_time.replace(":","")),START_HOUR*100,END_HOUR*100));

    }

    private static boolean isInRange(int now_time, int start_time, int end_time) {

       if ((now_time>start_time)&&
               (now_time<end_time)       )
       {
        return true;
       }
        return false;
    }

}
于 2013-06-20T12:55:24.220 回答