- 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/
我遇到了一个奇怪的问题。我的应用程序的 Release 版本似乎运行良好,但最近当我切换到 Debug 版本时,我在启动时立即遇到访问冲突。当释放分配的内存块时,就会发生访问冲突。所有这些都发生在静态
我在 C# 中偶然发现了这种奇怪的语法形式,并试图弄清楚它的含义以及如何使用它。网络上似乎没有关于此的任何文档。 object data = new { var1 = someValue, var2
我正在尝试使用浏览器的内置类型 CSSStyleDeclaration 以编程方式传递和修改样式(由于 .cssText 属性,这很方便)。 但是,new CSSStyleDeclaration()
我有现成的代码: internal bool firstAsSymbol(out Symbol s) { return (s = first as Symbol) !=
在新的 Eclipse 版本 2022-03 中,一些(但不是全部)java 项目在 Project Explorer View 中的外观发生了变化。尽管 Package Presentation 设
我正在尝试使用 FormData 通过获取 API 在 POST 请求中发送用户输入的数据。问题是,当我用我创建的表单创建一个新的 FormData 对象时,它一直在创建一个空对象——没有条目/键/值
我有一个用一些 intel-intrinsincs 编写的 C 代码。在我先用 avx 然后用 ssse3 标志编译后,我得到了两个完全不同的汇编代码。例如: AVX: vpunpckhbw %xm
最近,discord 为您自己的应用程序添加了对斜杠命令的支持。我通读了它的文档,并尝试搜索一些视频(但是该功能刚刚出现),但我不明白我实际上需要做什么才能使其正常工作。我正在使用 WebStorm(
我想使用 JRI 从 Java 调用 R。 我在 eclipse 下在主类中运行它: Rengine c = new Rengine(new String[] { "--vanilla" },
我正在使用新的 Place Autocomplete那是来自新的静态Google Places SDK 客户端库 (here)。所以它真的很容易使用,我刚得到this tutorial它按预期工作。
我刚刚更新到 flutter 版本 1.25.0-5.0.pre.92,我的代码中出现了很多与空安全相关的错误,这些错误以前运行良好。我没有以任何方式选择空安全,我所做的只是运行 flutter 升级
我已经使用 React Native 有一段时间了,但我想我会在网络上试用 React。所以我遵循了这个指南:https://reactjs.org/docs/create-a-new-react-a
周六早上在这里。尝试学习新的 Scala 编译器 dotty。 安装在我的 Mac 上使用 brew install lampepfl/brew/dotty 安装成功。我有版本 dotr -versi
我使用了谷歌地方的新依赖。单击自动完成 View 时应用程序崩溃。错误如下。, java.lang.NullPointerException: Place Fields must be set.
我关注了这个博客-> https://medium.com/@teyou21/training-your-object-detection-model-on-tensorflow-part-2-e9e
在哪里可以找到用于在此架构上进行组装的新寄存器的名称? 我指的是 X86 中的寄存器,如 EAX、ESP、EBX 等。但我希望它们是 64 位的。 我认为它们与我反汇编 C 代码时不同,我得到的是 r
新的服务总线库 Azure.Messaging.ServiceBus 使用 ServiceBusReceivedMessage 来接收消息 https://learn.microsoft.com/en
需要使用实时流媒体 channel 的实时编码类型在新的 Azure 门户中配置广告插入和石板图像。请帮忙解决这个问题,因为我找不到该功能。 最佳答案 此处描述了 Azure 媒体服务的广告插入选项
我正在使用新的 GitHub 操作,下面的工作流程的想法是在打开或同步 pr 时运行,它应该首先检查并安装依赖项,然后运行一些 yarn 脚本 name: PR to Master on: pul
我听说 DMD 2.058 中将有一个用于匿名函数的新语法,但我找不到任何相关信息。新语法是什么?旧语法是否会被弃用? 最佳答案 我相信它就像 C#'s . 以下内容是等效的: delegate(i,
我是一名优秀的程序员,十分优秀!