我们有一个应用程序,它应该使用本地时间(当前为 EDT)为日志添加时间戳。“/bin/date”清楚地显示“EDT”。但该应用程序却在过去一个小时添加时间戳。我猜它认为这是 EST。
/etc/sysconfig/clock 包含:ZONE="US/Eastern"
以上内容如何帮助区分 EST 和 EDT?
答案1
根据28.1.6. /etc/sysconfig/clock
ZONE
=/usr/share/zoneinfo
—下面的时区文件/etc/localtime
是一份副本。该文件包含以下信息:
ZONE="America/New York"
请注意
ZONE
参数由时间和日期属性工具(system-config-date)读取,手动编辑它不会改变系统时区。
文件/etc/localtime
比文件本身更重要clock
:它是一个表格,计算机可以根据它确定何时在标准时间和夏令时之间切换,以及应用哪个时区偏移。请注意,此表可以被TZ
环境变量,本质上是通过从包中选择不同的表tzdata
(例如,如果您的应用程序作为具有自己的 shell 环境的服务帐户运行)。
如果(如评论中所建议的),你的计算机的钟是错误的,那么你可能会考虑配置ntp
来帮助解决这个问题。
答案2
RHEL 和大多数其他 Linux 发行版中的所有日期都默认以 UTC 时间存储。这包括系统时钟。这由读取时间的例程中的时区调整。
时区偏移量通过日期进行调整,从而设置时间。如果时区设置为美国/东部,程序会要求提供当地时区时间,它会在夏令时期间读取 EDT,在标准时间期间读取 EST。如果程序要求提供系统时区的偏移量,它会在夏令时期间报告 EDT,在标准时间期间报告 EST。
您必须注意,某些应用程序不使用系统时区,尤其是 Web 应用程序。在这些情况下,您必须在应用程序中设置时区。如果您遇到某个应用程序的时间戳与实际时区相差一小时的问题,那么可能就是这种情况。
另一种可能性是参考时钟设置为错误的时间。