Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在SpringBoot中使用LocalDateTime时在本地和远程获取不同的时间戳(历元时间)_Java_Spring Boot_Epoch_Docker Container_Localdate - Fatal编程技术网

Java 在SpringBoot中使用LocalDateTime时在本地和远程获取不同的时间戳(历元时间)

Java 在SpringBoot中使用LocalDateTime时在本地和远程获取不同的时间戳(历元时间),java,spring-boot,epoch,docker-container,localdate,Java,Spring Boot,Epoch,Docker Container,Localdate,我使用LocalDateTime打印划时代时间,如下所示 System.out.println("timestamp "+LocalDateTime.now().atZone(ZoneId.of("Asia/Kolkata")).toInstant().toEpochMilli()); 因此,每当我在Intellij本地运行这段代码时,我都会得到加尔各答时区的正确时间戳,大约为1559461130527。这大约是加尔各答时间2019年6月2日星期日下午1:23:50.527 然后我有一个带有d

我使用LocalDateTime打印划时代时间,如下所示

System.out.println("timestamp "+LocalDateTime.now().atZone(ZoneId.of("Asia/Kolkata")).toInstant().toEpochMilli());
因此,每当我在Intellij本地运行这段代码时,我都会得到加尔各答时区的正确时间戳,大约为
1559461130527
。这大约是加尔各答时间2019年6月2日星期日下午1:23:50.527

然后我有一个带有docker容器的服务器,每当我在那里运行同一段代码时,我都会得到一个完全不同的时间戳,大约是
1559439902340
。这大约是2019年6月2日星期日上午7:30:02.340


我缺少的是,服务器不应该根据指定的时区打印时间戳吗。任何帮助都将不胜感激。谢谢。

您应该在now()语句中使用区域偏移量

例如,为了获得UTC时间,我使用
LocalDateTime.now(ZoneOffset.UTC)

在您的情况下,您可以直接使用时区ID


LocalDateTime.now(亚洲/加尔各答地区)

如果您查看
LocalDateTime::now
方法的实现,该方法如下所示:

public static LocalDateTime now() {
    return now(Clock.systemDefaultZone());
}
因此,它将为您的系统使用
时钟
实现默认值。可能您在容器中使用了不同的操作系统,这就是为什么会使用不同的默认时钟

因此,在您的情况下,
LocalDateTime::now
方法调用将根据系统默认值
Clock
返回不同的值。然后,如果要使用
atZone
方法将其转换为
ZonedDateTime
,则在同一区域中会有不同的时间,因为
LocalDateTime::now
在不同的操作系统中为不同的默认时钟返回了不同的值

要克服这一问题,您可以直接使用
ZoneDateTime
类并将区域传递到
now
方法:

ZonedDateTime.now(ZoneId.of("Asia/Kolkata")).toInstant().toEpochMilli();