我有一个 Java 应用程序,它依靠系统的日期/时间来检查新的和旧的电子邮件消息。
当我检查 Java 应用程序日志时,我发现服务器时区已更改。这导致应用程序无法完成其工作。
服务器时区突然改变的原因是什么?我该如何避免将来再次出现此类问题。
我正在使用 ubuntu 服务器 8.04。
答案1
您的应用程序是否通过检查 Unix 时间(time_t,自纪元以来的秒数)来检查时间,还是仅检查人类表达的时间,而忽略时区?
如果是后者,我担心你可能犯了编码错误。时区可以按进程设置和更改,就像更改 TZ 环境变量一样容易;尝试
export TZ=BST
date
export TZ=EST
date
请注意,这是一个环境变量,因此可由正在运行的进程的子进程继承。如果某人恰巧重新启动了 java 进程,而该进程的 TZ 设置为您意想不到的值,并且您的启动文件未强制使用 TZ,那么 java 将以意外的时区运行。
TZ 绝不是设置时区的唯一方法;我想提到这一点是为了向您展示 Unix 的设计允许时区成为个人便利,就像您的 shell 提示符或 PATH 一样。如果您需要某个进程具有特定的时区视图,则需要确保它在启动时设置该视图。