我很好奇其他管理员在远程管理服务器的上下文中对时区的体验是什么。在我的职业生涯中,我遇到过几个约定;
- 始终、始终、始终使用 UTC。
- 始终,始终,始终使用基地总部所在的时区。
- 使用碰巧管理人员的当地时间。
- 使用服务器位置的本地时间。
在某些地方,我遇到了多种相互冲突的约定。我自己的偏好是始终使用 UTC——没有夏令时。但出于某种原因,似乎大多数人更喜欢使用夏令时的某种当地时间概念。尽管这似乎是一个简单的技术问题,但围绕改变惯例的讨论似乎总是倾向于宗教分裂。
你在用什么?您认为每种方法的优点和缺点是什么?
UTC 很好的一些原因:
我更喜欢选项 4。在服务器上运行的应用程序有责任决定是否将 DateTime 值存储为 UTC。
此外,当服务器记录系统事件日志时,能够将本地事件与日志条目相关联非常好。例如,如果数据中心在当地时间报告网络中断,您可以轻松识别发生的任何问题,而无需在脑海中转换时间值。
不,不,一千次不。
有两种类型的程序员......那些了解本地时间应该仅用于显示/格式化目的的程序员,以及那些将自己画到角落的人......他们正在用煤油作画。
所有事件都应以 UTC 记录,并将结果转换为本地时间仅向用户显示。该死的是那些未能做到这一点的人,而那些以丢弃时区信息的格式使用本地时间的人是双重诅咒的(我在看着你,Oracle DBA)。
把它想象成一个污点检查......如果你将 timespec 转换为 localtime,然后用它做任何不将它发送到 STDOUT 的事情,你的程序不仅应该以致命错误退出,而且还应该删除你要教的源你一个教训。
如果可以选择,我喜欢将 BIOS 时钟保持为 UTC,但将实际服务器时间保持为本地时间。我们没有多时区存在,因此统一的日志时间戳不是 3M 等问题。
在我的公司,直到今年,我们将所有服务器都放在一个 TZ 中。我们现在有 3 个新时区的服务器。所有服务器都使用我们的本地时区运行。这对于日志分析非常有用,尤其是当我们有跨 3 个时区运行的分布式网站时。
但是,在一种特殊情况下,我们将服务器留给了客户 TZ。该应用程序应该在一天中的大部分时间都处于运行状态,并且维护任务通常设置为在“夜间”运行。起初,我们将服务器设置在 TZ 中,但维护任务对于我们心爱的“我们在你睡觉时工作”的客户来说太慢了......
UTC 也是一个很好的选择。除非人们在查看日志时总是参考当地时区(这里就是这种情况)。
我在 UTC 上运行我的所有服务器,我会尽快转换任何进入我控制的服务器。
到目前为止,一个例外是星号服务器,我不得不在当地时间离开。将其更改为 UTC 完全破坏了星号。(它在 1.6 上,希望当我在今年晚些时候升级它时这不会成为问题。)