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

发布于 2022-09-02 10:16:36 字数 163 浏览 32 评论 0

图片描述
图片描述

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

聊慰 2022-09-09 10:16:36

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

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

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

笔落惊风雨 2022-09-09 10:16:36

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

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 方便

人间☆小暴躁 2022-09-09 10:16:36
int i = Calendar.getInstance(Locale.US).get(Calendar.AM_PM);
System.out.println((i == Calendar.PM ? "pm" : "am"));
感受沵的脚步 2022-09-09 10:16:36

时间格式有问题。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文