几行代码判断当前时间是否是今天的下午,好像和预想的不一样

图片描述
图片描述

输出一直是false,比较郁闷,我就在刚才下午测试的

阅读 6.7k
4 个回答

取模运算的优先级等于乘法运算,从左到右结合。

你的代码等价于long today = curTime - (curTime % 24) * 60 * 60 * 1000;

改一下括号就好了:long today = curTime - curTime % (24 * 60 * 60 * 1000);

首先是括号的问题,下面这行要加括号,不加的话运算符优先级会导致数据错误。

long todayMillis = currentMillis - currentMillis % (24 * 60 * 60 * 1000L);

你的运算逻辑

long todayMillis = currentMillis - currentMillis % (24 * 60 * 60 * 1000L);
currentMillis - todayMillis

可以化简为:

currentMillis - (currentMillis - currentMillis % (24 * 60 * 60 * 1000L)) = currentMillis % (24 * 60 * 60 * 1000L) 

最后代码相当于:

currentMillis % (24 * 60 * 60 * 1000L) > 12 * 60 * 60 * 1000L

其次这种实现方式忽略了一点:

时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

也就是说这么算出来的结果应该去比较 currentMillis % (24 * 60 * 60 * 1000L) > 4 * 60 * 60 * 1000L

最后这种实现方式太繁琐,不如直接用
Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 12 方便

int i = Calendar.getInstance(Locale.US).get(Calendar.AM_PM);
System.out.println((i == Calendar.PM ? "pm" : "am"));

时间格式有问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题