gpt4 book ai didi

Java 8 分区日期转换

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:05 25 4
gpt4 key购买 nike

我有一个关于 java 中的区域的问题。我有一个用户案例,用户可以设置时区和一些时间表。例如,在时区 America/Los_Angeles 的周一和周日晚上 11 点运行任务。如果我的服务器时区是 UTC+0:00,我会遇到如何正确检测星期几和新时间的问题(大约是周二和周一​​早上 6 点)。所以我的问题是如何根据服务器时区和用户时区正确运行用户任务。

更新

我有一个 cron 表达式,我可以在其中设置小时、分钟和星期几。当用户创建新任务时,他可以设置自定义时区(例如,使用自定义时区 UTC-7:00 在星期一晚上 11 点运行任务)因此,如果我的理解是正确的,我需要将他的时间设置(晚上 11 点)转换为相应的服务器时间。因此,如果我的服务器时区是 UTC+3:00,我需要将晚上 11 点转换为上午 9 点,并且在我的服务器上这将不是星期一(而是星期二)。然后,如果我在周二上午 9 点运行 cron,那么用户会觉得任务在周一晚上 11 点运行。我的做法正确吗?我希望你能理解我的问题。提前致谢。

最佳答案

简短的回答:自纪元以来以毫秒为单位进行计数。

长答案:
首先,了解计算机时间的工作原理非常重要。我会推荐this article ..,但要点是,一切都是自 1970 年 1 月 1 日以来计算的。其次,我想一个例子可以告诉你超过 1000 个单词:

ZonedDateTime dateTime = ZonedDateTime.parse("2016-10-20T11:34:57+02:00[Europe/Zurich]"); // UTC + 2
long millisEurope = dateTime.toInstant().toEpochMilli();
System.out.println(millisEurope); // 1476956097000

dateTime = dateTime.withZoneSameLocal(ZoneId.of("America/Los_Angeles")); // UTC - 7
long millisAmerica = dateTime.toInstant().toEpochMilli();
System.out.println(millisAmerica); // 1476988497000

// The difference between UTC + 2 and UTC - 7 == -9
System.out.println((millisEurope - millisAmerica) / 1000 / 60 / 60);

ZonedDateTime将始终使用 UTC (+ 0) 加上定义的时区。

编辑(更新后):
是的,如果您获取用户设置的时间和时区,则必须将其转换为您自己的时区,以便在同一时间点执行。

关于Java 8 分区日期转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40153169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com