java - 计算以 Millis 为单位的日变化
问题描述
这两行计算自 1970 年以来的天数。当我将手机时间设置为 23:55 时,这两行应该返回不同的值,因为 23:55 + 10 分钟是新的一天。但不知何故,两条线都返回相同的值。
Log.d("Main", "today " + (int) (System.currentTimeMillis() / TimeUnit.DAYS.toMillis(1) ) );
Log.d("Main", "tomorrow " + (int) ((System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(10)) / TimeUnit.DAYS.toMillis(1) ) );
日志消息:
12-09 17109-17109/com.example..myapplication D/Main:
today 17874 // 23:55
tomorrow 17874 // 00:05 this line should be 17875, because it's a new day
解决方案
这两行应该返回不同的值
如果您不向他们申请整数除法,他们会这样做。
因为 23:55 + 10 分钟是新的一天
是的,但自 1970 年以来,它只增加了 10 分钟。
检查此代码,它允许比整数除法更准确的除法:
System.out.println("today " +
(System.currentTimeMillis() * 1.0 / TimeUnit.DAYS.toMillis(1)));
System.out.println("tomorrow " +
((System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(10)) * 1.0 / TimeUnit.DAYS.toMillis(1)));
将打印:
today 17872.55873355324
tomorrow 17872.565677997685
您的代码截断了十进制数字,并且您认为这两行都返回相同的结果。
当然,如果不是添加 10 分钟,而是添加 1 天,那么代码中的结果将是正确的:
System.out.println("today " +
(int) (System.currentTimeMillis() / TimeUnit.DAYS.toMillis(1)));
System.out.println("tomorrow " +
(int) ((System.currentTimeMillis() + TimeUnit.DAYS.toMillis(1)) / TimeUnit.DAYS.toMillis(1)));
将打印:
today 17872
tomorrow 17873
推荐阅读
- javascript - 将包含 VueJS 的网页导出到本地存储的 HTML 文件
- ios - Facebook 登录 - 仅请求电子邮件,而不是个人资料图片、姓名等
- javascript - 将样式绑定到vue中的子组件
- scikit-learn - sklearn.dbscan.components_ 返回什么?
- r - R plotly变量值刻度距离到下图
- swift - 重置 FCM 令牌 Swift
- c# - 使用 NuGet 包管理器安装 Entity Framework 6 不会创建相关引用。(我认为)
- excel - 在 PasteSpecial vba 之后获得选择
- xcode - 如何使 Xcode 12.4 中的 Tab(⇥) 按钮工作?
- c# - 克隆存储库后,为 TypeScript 导入 MsBuildTargets 不起作用