Java 为什么以毫秒为单位添加时间会显示不正确的结果?
在我的调试视图中,我无法了解以下代码的情况:Java 为什么以毫秒为单位添加时间会显示不正确的结果?,java,datetime,Java,Datetime,在我的调试视图中,我无法了解以下代码的情况: public void addTime(int day, long offsetMillis) { long currentTime = mCalendar.getTimeInMillis(); long newTime = currentTime + offsetMillis; Date offsetDate = new Date(offsetMillis); Date currentDate = new Dat
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);
// ...
}
我需要将以毫秒为单位的时间添加到当前时间。查看调试状态,我可以看到offsetDate转换为23:46,这是我想要添加的正确时间量
currentDate是当前时间,即给定日期00:00的开始时间
newDate是当前时间加上偏移量,转换为13:46
这是不正确的,看起来这里的GMT是不同的,但是正如您所看到的,在调试视图中,GMT都是+10。所以我一辈子都搞不懂Java在做什么。。。请帮我解决这个问题好吗?给定以毫秒为单位的时间,如何将其添加到给定日期?您需要指定时区。例如:
Date curr_date = new Date(System.currentTimeMillis("YOUR_TIMEZONE_HERE"));
您需要指定您的时区。例如:
Date curr_date = new Date(System.currentTimeMillis("YOUR_TIMEZONE_HERE"));
所有的计算都是正确的。您指定的毫秒数实际上等于13小时46分钟。offsetDate仅显示23:46,因为时区设置为GMT+10
Unix时间戳通过计算自1970年1月1日00:00 UTC以来经过的毫秒数来工作。此日期相当于1970年1月1日10:00 UTC+10。因此,为offsetDate显示的时间本身被10小时抵消。所有计算都是正确的。您指定的毫秒数实际上等于13小时46分钟。offsetDate仅显示23:46,因为时区设置为GMT+10 Unix时间戳通过计算自1970年1月1日00:00 UTC以来经过的毫秒数来工作。此日期相当于1970年1月1日10:00 UTC+10。因此,为offsetDate显示的时间本身偏移了10小时。是正确的,应该接受 tl;博士 java.time 使用java.time类取代麻烦的旧日期时间类,这项工作将更容易、更清晰 该类表示时间线上的一个时刻,分辨率为(小数点的九(9)位) 或者将您的时间跨度表示为对象
Duration d = Duration.ofMillis( 84_456_000L ) ;
或者
应用持续时间
Instant later = now.plus( d ) ;
是正确的,应该被接受
tl;博士
java.time
使用java.time类取代麻烦的旧日期时间类,这项工作将更容易、更清晰
该类表示时间线上的一个时刻,分辨率为(小数点的九(9)位)
或者将您的时间跨度表示为对象
Duration d = Duration.ofMillis( 84_456_000L ) ;
或者
应用持续时间
Instant later = now.plus( d ) ;
理想情况下,您应该使用
java.time
类而不是Date
您应该使用java.time
类而不是Date