- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 Java 程序作为 cron 作业在 linux 虚拟机上运行。当前存在一个问题,以下行用作日志记录的一部分以存储当前日期和时间:
String date = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").format(new Date());
今天夏令时过后,确定系统日期设置不正确,因为它没有更新。在使用以下命令修复此问题并重新启动 linux 环境后,日期现在是正确的并且已更新为夏令时。
ln -s /usr/share/zoneinfo/America/New_York /etc/localtime
但是,当 Java 程序作为 cron 作业的一部分执行时,日期仍然晚了一个小时。这会导致内部计时问题,因为 new Date()
用于获取当前系统时间,这会导致进程中的后续问题。例如在下午 5:00,Java 程序输出下午 4:00。这个实现是否有额外的考虑? new Date()
不应该总是返回当前系统日期吗?
将调试行添加到 cron 作业,这会在预期的正确时间执行。
最佳答案
日期
类Shouldn't new Date() always return the current system date?
是的,Date
类始终以 UTC 格式捕获当前时刻。让我重复一遍:Date
以 UTC 格式捕捉时刻。
问题来自该类的 toString
方法的一个善意但不幸的“特性”,其中 JVM 当前默认时区用于生成该字符串。避免这个过时且麻烦的类(class)的众多原因之一。
我怀疑您的“tzdata”时区数据文件已过时,无法识别 DST 转换的新日期。
Java 实现通常在启动时从主机操作系统中获取它们当前的默认时区。在 JVM 之后,更改主机操作系统的时区对 JVM 没有影响。
重新启动 JVM 以在主机操作系统中获取新的区域设置。
最佳做法通常是将您的服务器设置为 UTC。那么你不必担心夏令时的废话。
您的大部分编程、日志记录、cron 作业、数据交换和数据序列化都应该使用 UTC。
例如,请注意 Stack Overflow 如何使用 UTC 报告您“今天”和“昨天”的 Activity 。学会将 UTC 视为唯一真实时间;所有区域都是该主题的变体。
仅在关键时应用时区,例如在向期望特定时区的用户进行演示时。
请记住,您的问题不是由于时空弯曲造成的。秒、分和小时继续正常递增,就 UTC 而言,滴答滴答。您的问题在于错误翻译成具有过时时区规则更改数据的时区。
您的 Java 应用程序应始终明确指定其所需/预期的时区。如果省略,则隐式应用 JVM 当前的默认时区。
JVM 默认值可以随时被 JVM 内任何应用程序的任何线程中的任何代码更改,并立即影响该 JVM 中的所有其他代码。所以永远不要依赖当前的默认值来做任何重要的事情。与用户确认,并在您的代码中明确指定。
包括 Date
和 Calendar
在内的旧日期时间类一团糟。避开他们。它们现在是遗留的,被 java.time 类所取代。
Instant
类是时间线上的一个时刻,分辨率以纳秒为单位,始终采用 UTC。
Instant instant = Instant.now() ;
要生成标准 ISO 8601 格式的字符串,请调用 toString
。末尾的 Z
是 Zulu 的缩写,表示 UTC。
String output = instant.toString() ;
2017-01-23T12:34:56.123456789Z
使用这两行简单的代码可以避免整个问题。
但是你应该定期更新 tzdata 在:
关于java - 使用新的 java.util.Date() 返回 DST 落后一小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42773913/
let config = [{ name: 1, state: 1, output: 'Y', }, { name: 2, state: 1, outp
我在使用 C# 统一编程时遇到了一些问题。我试图在开始游戏时请求一个插页式广告,这样我就可以在玩家死亡 5 次时显示它。问题是,当我遇到第 5 次死亡时,广告将不会显示。当我尝试在关卡开始时请求广告时
我有 JPanel,从中打开一个扩展 AbstractAIFDialog 的搜索条件对话框。它由搜索条件文本字段、结果 TableView 和搜索按钮组成。单击“搜索”后,在此对话框中,我需要显示进度
所以,我的蛇做了连续的运动,但如果我按任意键,它就会及时倒退并前后滞后。这是视频:https://youtu.be/KCesu5bGiS8 我的猜测是更快地更新按键输入,但是当我这样做时,所有内容都会
我正在尝试获得 TODAY THE CURRENT 的所有选票,并且我几乎已经通过以下 mysql 查询实现了这一点,但是有一个问题。 这段代码让我获得了今天的选票: SELECT COUNT(*)
我正在使用 RS256 算法生成 Azure AD token 。 当我解码 https://jwt.io/ 中的 token 时发出的时间比请求时间晚了 5 分钟。 请求的时间:美国标准时间晚上 9
当我查询 NOW() 时,mysql 返回的时间与服务器上的当前时间相差大约 -30 秒。有任何想法吗?我尝试查看配置文件,但一无所获。我正在运行 5.1.37 版本 SELECT NOW() 最佳答
我正在做一个开源项目。我首先 fork 这个项目,将它克隆到我的机器上,然后直接在 master 分支上进行了更改。我提交了这些更改并将其推到我的 fork 上。然后我打开了该更改的 pull 请求。
所以我用了大约 20 分钟写出了这个程序,并花了最后 40 分钟绞尽脑汁地想为什么它返回 21131 而不是 21124,这似乎是正确的答案。我知道代码没有问题(很可能),因为它适用于我测试的每个数字
我在使用 QueryDsl 日期算法时遇到问题。它对我不起作用,会引发以下错误: Caused by: org.postgresql.util.PSQLException: ERROR: functi
嗨,我正在玩 Angular ui 时间选择器 http://angular-ui.github.io/bootstrap/ 当我使用它时,我的日期晚了 1 小时,我该如何更改它以及为什么? JS
我是一名优秀的程序员,十分优秀!