如果系统时间因日间节能时间而变化,那么gettimeofday()的输出是否会改变?
答案 0 :(得分:1)
请注意,Unix系统不会使用夏令时“更改系统时间” - 当程序要打印当前时间时,全部处理,通常使用localtime(3)
。< / p>
即使当地政府决定改变我们墙上的时钟,这个时代以来的秒数仍在单调计算。
答案 1 :(得分:0)
UNIX / linux计算机使用的UNIX时间或多或少是UTC,即格林威治伦敦。只有当您打印或显示时间时才会转换为本地时间。这可以通过查阅TIMEZONE设置来完成。
在linux上,时区数据库位于/ usr / share / zoneinfo中 - 当前时区在/ etc / localtime中定义。此文件处理夏令时,因此打印时的转换处理得很干净。请注意,时区通常是出于地理和政治原因而定义的。
随着各州政府和/或地方议会决定更改其时区或夏令时设置,您的时区数据库将定期更新。最近萨摩亚在2011年底跳过了整整一天。如果任何本地萨摩亚UNIX / Linux计算机上的TIMEZONE文件已事先更新,那么就不会遇到任何问题。
其他考虑因素是NTP时间同步和闰秒。如果您运行NTP客户端以使您的计算机保持同步,那么这可以通过加速或降低内部计算机时钟来“缩小”内部计算机时钟 - 请注意,设置时间通常是错误的想法手动使用'date'或'rdate'命令会导致时间跳跃,并可能影响使用某种超时的软件。 (最近的一个例子是我必须维护的Asterisk PABX。)
如果您要手动更改时间,请使用ntpdate命令并定义上游NTP服务器。