如何知道现在时间是否在两个小时之间?

问题描述 投票:16回答:7

我现在有时间:

new Date();

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

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

这里的图像更好地解释:

enter image description here

某些情况下静音模式不会触发:

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!!
java android time format hour
7个回答
25
投票

试试这个

    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);

11
投票
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
}

4
投票

java.time

现代方法是使用Java 8及更高版本内置的java.time类。许多功能在ThreeTen-Backport项目中反向移植到Java 6和7,并在ThreeTenABP项目中进一步适应Android。

时区在这里至关重要。对于任何特定时刻,日期和时间都按区域在世界各地变化。

ZoneId z = ZoneId.of( "America/Montreal" );

获取当前时刻。

ZonedDateTime zdt = ZonedDateTime.now( z );

提取时间。名称的Local部分表示对象中没有包含时区的概念。

LocalTime lt = zdt.toLocalTime();

定义晚上的限制。

LocalTime start = LocalTime.of( 23 , 0 );  // 11 PM.
LocalTime stop = LocalTime.of( 8 , 0 );  // 8 AM.

相比。

  • 我们需要弄清楚我们是跨越新的一天还是在同一天。 LocalTime没有约会概念,只有一个24小时的通用日。所以我们必须测试开始是在停止之前还是之后,因为我们需要针对每种情况使用不同的比较算法。我们应该考虑启动是否等于停止,因为这可能是一个特殊情况,具体取决于您的业务规则。
  • 在日期时间工作中,我们通常将时间跨度定义为半开放,其中开头是包含的,而结尾是独占的。

这是一种方法。

Boolean silentRunning = null ;
if( start.equals( stop ) ) {
    silentRunning = Boolean.FALSE ;
} else if( stop.isAfter( start ) ) {  // Example 3 PM to 6 PM.
    silentRunning = ( ! lt.isBefore( start ) ) && lt.isBefore( stop ) ;
} else if ( stop.isBefore( start ) ) {  // Example 11 PM to 8 AM.
    silentRunning = ( lt.equals( start ) || lt.isAfter( start ) ) && lt.isBefore( stop ) ;
} else {
    // Error. Should not reach this point. Paranoid check.
}

About java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,如java.util.DateCalendarSimpleDateFormat

现在在Joda-Timemaintenance mode项目建议迁移到java.time班。

要了解更多信息,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规格是JSR 310

从哪里获取java.time类?


更新:以上是本答复的更新版本。以下是旧的。

Joda-Time

对于日期时间工作,Joda-Time库远远优于java.util.Date和.Calendar类。

时区对于确定一天中的时间至关重要。显然,“现在”在巴黎的晚些时候比蒙特利尔晚。

定义一段时间通常最好是半开,qazxsw点,其中开头是包容性的,但结尾是排他性的。

[)

3
投票

我认为这是更清洁的解决方案,它的工作原理。我用不同的时间参数测试了它。

DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( zone );
Integer hour = now.getHourOfDay();
Boolean isNight = ( ( hour >= 23  ) && ( hour < 8 ) );

2
投票

你可以看到 /** * @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); } 教程here,你可以用Date.before

你也可以得到他的毫秒并进行比较。


0
投票

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

Date.after

-1
投票

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

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.