您好 如果是早上,中午,下午,晚上,我想创建具有不同行为的应用程序。 现在我想为每个变量设置一些变量 例如中午= 12:00 现在我想比较他们的当前时间,看看它是否是早上的例子,并计算多少到中午12点 - 当前时间。 现在我已经看到了几个具有不同日期的示例,但我想仅按小时进行比较。
答案 0 :(得分:2)
您可以使用joda time hoursBetween,也可以使用Java日历类。我建议使用JodaTime。
使用Java Calendar类:
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
这不会影响日光量,并与您的LOCAL时区进行比较。
使用Joda Time houret:
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);
答案 1 :(得分:2)
Calendar cal=GregorianCalendar.getInstance();
int hour = cal.get(Calendar.HOUR);
然后比较小时。
这适用于您当地的时区
答案 2 :(得分:2)
if (
LocalTime.now( ZoneId.of( "Africa/Tunis” ) )
.isBefore( LocalTime.of( 12 , 0 ) )
) {
… // Do morning stuff.
}
其他答案是正确的,但使用过时的课程。 java.util.Date
/ .Calendar
类已被Java 8及更高版本中内置的java.time框架取代。
LocalTime
类代表没有日期且没有时区的时间。
为你定义"早晨","下午"等等制定一些常量。在实际工作中,我会使用枚举。但我会在这里使用一个简单的变量进行演示。
LocalTime noon = LocalTime.of( 12 , 0 );
时区对于解释时间至关重要。一个时间只在特定时区的背景下具有意义。如果未指定,则将自动以静默方式应用JVM的当前默认时区。我强烈建议您始终明确指定所需/预期的时区。您可以将ZonedDateTime
视为Instant
加上时区(ZoneId
)的组合。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime now = ZonedDateTime.now( zoneId );
我们可以根据指定的时区从LocalTime
中提取ZonedDateTime
。
LocalTime nowLocalTime = now.toLocalTime();
与目标时间比较。
Boolean isMorning = nowLocalTime.isBefore( noon );
使用Duration
类将时间跨度表示为总秒数加上几分之一秒(纳秒)。
ZonedDateTime todayNoon = now.adjustInto( noon );
Duration untilNoon = Duration.between( now , todayNoon );
Duration::toString
的默认输出是由ISO 8601定义的格式的字符串。示例PT38M2S
三十八分二秒。您也可以询问分钟数等。
通过从ZonedDateTime
个对象获取持续时间,我们将获得准确的结果,以解决夏令时(DST)等异常情况。如果您希望使用通用的24小时工作日计算,请将LocalTime
个对象传递给Duration.between
。
答案 3 :(得分:0)
您可以使用GregorianCalendar来执行此操作。创建一个新的GregorianCalendar并将月,日和年设置为某个常量值。将小时设置为您感兴趣的任何时间,即中午12:00。现在只需getTimeInMillis()并存储该值。稍后,您可以使用no-arg版本创建另一个GregorianCalendar以获取当前时间。将月,日和年设置为与基准值相同的常量值,然后再次比较getTimeInMillis()以查看它是否在参考时间之前,等于或之后。