我有一台Linux机器,其时区设置为Asia / Qatar。当我使用格式化程序打印Instant.EPOCH时,它给我错误的区域信息,而对于Instant.now(),区域信息是正确的。下面是我的代码及其输出。谁能帮我,为什么会有这个差异?
import java.util.Date;
import java.time.format.DateTimeFormatter;
import java.time.Instant;
import java.time.ZoneId;
public class DateTest {
public static void main(String[] args) {
String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS Z";
Instant myInstant = Instant.EPOCH;
Instant myInstantNow = Instant.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern).withZone(ZoneId.systemDefault());
System.out.println(formatter.format(myInstant));
System.out.println(formatter.format(myInstantNow));
}
}
Run Code Online (Sandbox Code Playgroud)
代码的输出为:
1970-01-01T04:00:00.000 +0400
2019-09-29T18:30:14.766 +0300
Run Code Online (Sandbox Code Playgroud)
Java版本:“ 1.8.0_181”
如果我在Windows中运行相同的代码,它的工作正常。我的Instant.EPOCH也得到+0300。