假设 从1970年1月1日开始 以n毫秒为一个周期(n>0),我该怎么获得1970-1-1到现在经历了几个这样的周期?用java实现 要求兼容夏令时
时间: 2024-03-19 16:44:29 浏览: 18
你可以使用Java中的时间类库来计算从1970-1-1到现在的毫秒数,然后再除以n毫秒的周期长度,得到经历的周期数。
以下是一个示例代码:
```java
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class PeriodsSince1970 {
public static void main(String[] args) {
long n = 86400000; // 周期长度为一天,单位为毫秒
Instant epoch = Instant.ofEpochSecond(0);
Instant now = Instant.now();
long milliseconds = now.toEpochMilli() - epoch.toEpochMilli();
// 考虑夏令时的影响,使用ZoneId.systemDefault()获取当前时区
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(now, ZoneId.systemDefault());
if (zonedDateTime.getZone().getRules().isDaylightSavings(zonedDateTime.toInstant())) {
milliseconds -= zonedDateTime.getZone().getRules().getDaylightSavings(now).toMillis();
}
long periods = milliseconds / n;
System.out.println("经历了 " + periods + " 个周期");
}
}
```
在示例代码中,我们使用`Instant`类表示1970-1-1和现在的时间点,计算它们之间的毫秒数。然后,我们使用`ZonedDateTime`类将当前时间点转换为当前时区的日期和时间,并检查当前是否处于夏令时。如果是,我们需要减去夏令时的时间差。最后,我们将毫秒数除以周期长度,得到经历的周期数。