java - 为什么以毫秒为单位添加时间会显示不正确的结果?

标签 java datetime

我无法弄清楚调试 View 中以下代码发生了什么:

public void addTime(int day, long offsetMillis) {

    long currentTime = mCalendar.getTimeInMillis();
    long newTime = currentTime + offsetMillis;

    Date offsetDate = new Date(offsetMillis);
    Date currentDate = new Date(currentTime);
    Date newDate = new Date(newTime);
    // ...
}

enter image description here

我需要将时间(以毫秒为单位)添加到当前时间。查看调试状态,我可以看到 offsetDate 转换为 23:46,这是我想要添加的正确时间量。

currentDate 是当前时间,即给定日期的开始时间 00:00。

newDate 是当前时间加上偏移量,即 13:46。

这是不正确的,看起来 GMT 是这里的差异,但正如您所看到的,GMT 在调试 View 中都是 +10。所以我一生都无法弄清楚Java在做什么......请帮我解决这个问题吗?给定以毫秒为单位的时间,如何将其添加到给定日期?

最佳答案

所有的计算都是正确的。您指定的毫秒数实际上等于 13 小时 46 分钟。 offsetDate 仅显示 23:46,因为时区设置为 GMT+10。

Unix 时间戳的工作原理是计算自 1970 年 1 月 1 日 00:00 UTC 以来经过的毫秒数。该日期相当于 1970 年 1 月 1 日 10:00 UTC+10。因此,offsetDate 显示的时间本身会偏移 10 小时。

关于java - 为什么以毫秒为单位添加时间会显示不正确的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44217698/

相关文章:

java - Spark 在按键进行 group-reduce 时嵌套结构的序列化不正确

java - 结合 2 个间隔

java - org.postgresql.util.PSQLException : ERROR: syntax error near «, » 在 Java 中

python - 未知的字符串格式,python 错误

php - 获取带有时区的日期 javascript

java - Android:从 sampledata 文件夹中读取 json

django - DateTimeInput 在 Django 中被呈现为简单的文本输入

c# - 字符串到 DateTime dd/mm/yy 错误

c# - NodaTime Invalid DateTime.Kind for Instant.FromDateTimeUtc

Java - 分配替换的字符串,或打印它