比较Java中的时间和时间操作

比较Java中的时间和时间操作,java,time,Java,Time,你好 我想创建应用程序,有不同的行为,如果它是早上,中午,下午,晚上。 现在我想为每个变量设置一些时间变量 例如,中午=12:00 现在我想比较一下现在的时间,看看是否是早上,然后计算到中午12:00的时间——现在的时间。 现在我看到了几个不同日期的示例,但我只想按小时进行比较。您可以使用joda time,也可以使用Java calendar类。我建议使用JodaTime 使用Java日历类: Calendar future = Calendar.getInstance(); //f

你好 我想创建应用程序,有不同的行为,如果它是早上,中午,下午,晚上。 现在我想为每个变量设置一些时间变量 例如,中午=12:00 现在我想比较一下现在的时间,看看是否是早上,然后计算到中午12:00的时间——现在的时间。 现在我看到了几个不同日期的示例,但我只想按小时进行比较。

您可以使用joda time,也可以使用Java calendar类。我建议使用JodaTime

  • 使用Java日历类:

        Calendar future = Calendar.getInstance(); //future time
        future.set(Calendar.YEAR, 2011);
        future.set(Calendar.MONTH, 0);
        future.set(Calendar.DATE,27);
        future.set(Calendar.HOUR_OF_DAY,17);
        //get current time
        Calendar now = Calendar.getInstance();
        //time difference between now and future in hours
        long hoursDiff = (future.getTimeInMillis() - now.getTimeInMillis())/(60 * 60 * 1000);
        System.out.println("Difference in hours is ="+hoursDiff);//prints 2 since it's 3 pm here 
    
这并不考虑日光节约,而是与您当地的时区进行比较

LocalTime nowLocalTime = now.toLocalTime();
  • 使用Joda时间小时数介于:

    DateTime futureDate = new DateTime(future.getTime());
    DateTime current = new DateTime(now.getTime());
    int difference = Hours.hoursBetween(current,futureDate).getHours();
    System.out.println("Difference in hours is ="+difference);
    

还可以查看这个和这个。

您可以使用GregoriaCalendar来执行此操作。创建一个新的GregorianCalendar,并将月、日和年设置为某个常量值。把时间定在你感兴趣的任何时间(中午12点)。现在只需获取timeinmillis()并存储该值。稍后,您可以创建另一个无参数版本的GregorianCalendar以获取当前时间。将月、日和年设置为与基准值相同的常量值,然后再次比较getTimeInMillis()以查看它是在一天的参考时间之前、等于还是之后

    Calendar cal=GregorianCalendar.getInstance();

    int hour = cal.get(Calendar.HOUR);
然后比较时间

这将适用于您的本地时区

tl;博士 java.time 其他答案是正确的,但使用过时的课程。
java.util.Date
/
.Calendar
类已被内置于Java8及更高版本中的框架所取代

LocalTime
类表示一天中没有日期和时区的时间

LocalTime nowLocalTime = now.toLocalTime();
为“上午”、“下午”等的定义设定一些常量。在实际工作中,我会使用枚举。但是我将在这里使用一个简单的变量来演示

LocalTime noon = LocalTime.of( 12 , 0 );
时区对于解释一天中的时间至关重要。一天中的某个时间只有在特定时区的上下文中才有意义。如果未指定,JVM的当前默认时区将自动静默应用。我强烈建议您始终明确指定所需/预期的时区。您可以将a视为一个
即时
加上一个时区()的组合

我们可以根据其指定的时区从
ZoneDateTime
中提取
LocalTime

LocalTime nowLocalTime = now.toLocalTime();
与目标时间进行比较

Boolean isMorning = nowLocalTime.isBefore( noon );
使用该类将时间跨度表示为总秒数加上几分之一秒(以纳秒为单位)

ZonedDateTime todayNoon = now.adjustInto( noon );
Duration untilNoon = Duration.between( now , todayNoon );
的默认输出是一个字符串,其格式由定义。示例
PT38M2S
38分2秒。您还可以询问分钟数等

通过从
ZonedDateTime
对象中获取持续时间,我们将获得精确的结果,以说明夏令时(DST)等异常情况。如果希望使用常规的24小时计算,请将
LocalTime
对象传递到
Duration.between