Enable/disable Ubuntu 18.04 通过命令行的夏令时
Enable/disable Daylight Savings Time through command line on Ubuntu 18.04
注意:"Disable" 夏令时,我的意思是系统时钟忽略夏令时的任何时间变化(即,如果 DST 被禁用,那么时钟将不会 "spring forward" 3 月一个小时,11 月不会 "fall back" 一个小时。
我正在 Ubuntu 18.04 上为 运行 设计一个 Qt 应用程序,我需要能够设置系统时区、时间和日期。
关于时间和日期的设置,我可以很方便的使用timedatctl修改系统设置。但是,此命令似乎确实能够禁用夏令时。它会根据时区和日期报告 DST 是否 "Active",但您不能 disable/enable 此设置。
在 Windows 上,我曾使用 tzutil.exe 使用 dst_off 标志设置 DST 启用或不启用。有没有等同于Ubuntu的东西?
我将从时区的角度来回答这个问题。
禁用夏令时通常不是一件好事。这些功能忽略了时区的现实。时区由世界各地的各个政府定义,这些政府决定夏令时生效的地点和时间。
例如,我位于美国华盛顿州雷德蒙德。根据美国法律,它位于太平洋时区,标准时间为 UTC-8,白天为 UTC-7。美国法律目前允许各州 opt-out 夏令时,亚利桑那州和夏威夷已经这样做了。但是华盛顿没有,因此 DST 在这里适用于我。现在(7 月)是 11:00 PDT,因为我正在写这篇文章。我不能自己决定它是 10:00 PST。我将不得不搬到不同的时区才能做到这一点。
大多数系统(包括 Ubuntu)中使用的 IANA time zone database(TZDB、Olson 等)中的时区定义了世界各地的不同区域,自从至少 1970 年。如果有些区域共享相同的标准时间,但在是否获得 DST 或 when DST 适用方面不同,则它们在 TZDB 中有自己不同的条目。换句话说,说 "I want to be in America/Los_Angeles
without DST" 是没有意义的,因为太平洋时区没有地方这样做。如果您在皮特凯恩群岛(没有 DST 的 UTC-8),那么您只需使用 Pacific/Pitcairn
.
也许是一个更清楚的例子:美国山地时间的大部分时间使用 MST (UTC-7) 和 MDT (UTC-6),它获得 TZDB 标识符 America/Denver
。亚利桑那州大部分地区不使用夏令时,全年使用 MST (UTC-7),因此它在 TZDB 中获得了自己的标识符 America/Phoenix
。
那你可能会问,那为什么Windows有"Disable DST"这个功能呢?有几个原因我可以公开谈论(披露:我在微软工作,偶尔在这个领域)。
Windows 时区功能最初是使用 Windows NT 创建的。那时,Olson 数据库已经存在,但并不像今天这样无处不在。 Microsoft 决定创建自己的实现,因此直到今天还有两个不同的时区数据源。 TZDB 和微软。
以前Windows时区数据没有覆盖整个世界。因此,一些 Windows 用户不得不依靠此功能来获得准确的时间。这在 an update in June 2016 to align with Microsoft's mission statement of "... every person and every organization on the planet ...". Today, there is commitment and policy 后发生了巨大变化,以确保准确的时区数据。
当政府决定更改其时区(制定夏令时、暂停夏令时、更改夏令时日期或时间、更改标准时差等)时,立法者有时会做出至关重要的决定没有提供足够的交货时间的错误 (see my blog post on this subject)。发生这种情况时,Microsoft 可能会提供有关如何获取正确本地时间的建议临时指导,直到可以提供更新为止。此类指导可能包括禁用 DST 或切换到不同的时区。这些建议总是临时的,因此该功能是否需要存在是值得商榷的。
一般来说,大多数 Windows 用户不应该禁用夏令时。如果他们发现自己需要这样做才能获得正确的当地时间(上述罕见情况除外),他们可能只是没有首先将他们的时区设置为正确的条目。
Ubuntu 和其他操作系统上的 TZDB 时区往往比 Windows 具有更短的更新周期,因此不会受到 short-notice 更改的严重影响。
注意:"Disable" 夏令时,我的意思是系统时钟忽略夏令时的任何时间变化(即,如果 DST 被禁用,那么时钟将不会 "spring forward" 3 月一个小时,11 月不会 "fall back" 一个小时。
我正在 Ubuntu 18.04 上为 运行 设计一个 Qt 应用程序,我需要能够设置系统时区、时间和日期。
关于时间和日期的设置,我可以很方便的使用timedatctl修改系统设置。但是,此命令似乎确实能够禁用夏令时。它会根据时区和日期报告 DST 是否 "Active",但您不能 disable/enable 此设置。
在 Windows 上,我曾使用 tzutil.exe 使用 dst_off 标志设置 DST 启用或不启用。有没有等同于Ubuntu的东西?
我将从时区的角度来回答这个问题。
禁用夏令时通常不是一件好事。这些功能忽略了时区的现实。时区由世界各地的各个政府定义,这些政府决定夏令时生效的地点和时间。
例如,我位于美国华盛顿州雷德蒙德。根据美国法律,它位于太平洋时区,标准时间为 UTC-8,白天为 UTC-7。美国法律目前允许各州 opt-out 夏令时,亚利桑那州和夏威夷已经这样做了。但是华盛顿没有,因此 DST 在这里适用于我。现在(7 月)是 11:00 PDT,因为我正在写这篇文章。我不能自己决定它是 10:00 PST。我将不得不搬到不同的时区才能做到这一点。
大多数系统(包括 Ubuntu)中使用的 IANA time zone database(TZDB、Olson 等)中的时区定义了世界各地的不同区域,自从至少 1970 年。如果有些区域共享相同的标准时间,但在是否获得 DST 或 when DST 适用方面不同,则它们在 TZDB 中有自己不同的条目。换句话说,说 "I want to be in America/Los_Angeles
without DST" 是没有意义的,因为太平洋时区没有地方这样做。如果您在皮特凯恩群岛(没有 DST 的 UTC-8),那么您只需使用 Pacific/Pitcairn
.
也许是一个更清楚的例子:美国山地时间的大部分时间使用 MST (UTC-7) 和 MDT (UTC-6),它获得 TZDB 标识符 America/Denver
。亚利桑那州大部分地区不使用夏令时,全年使用 MST (UTC-7),因此它在 TZDB 中获得了自己的标识符 America/Phoenix
。
那你可能会问,那为什么Windows有"Disable DST"这个功能呢?有几个原因我可以公开谈论(披露:我在微软工作,偶尔在这个领域)。
Windows 时区功能最初是使用 Windows NT 创建的。那时,Olson 数据库已经存在,但并不像今天这样无处不在。 Microsoft 决定创建自己的实现,因此直到今天还有两个不同的时区数据源。 TZDB 和微软。
以前Windows时区数据没有覆盖整个世界。因此,一些 Windows 用户不得不依靠此功能来获得准确的时间。这在 an update in June 2016 to align with Microsoft's mission statement of "... every person and every organization on the planet ...". Today, there is commitment and policy 后发生了巨大变化,以确保准确的时区数据。
当政府决定更改其时区(制定夏令时、暂停夏令时、更改夏令时日期或时间、更改标准时差等)时,立法者有时会做出至关重要的决定没有提供足够的交货时间的错误 (see my blog post on this subject)。发生这种情况时,Microsoft 可能会提供有关如何获取正确本地时间的建议临时指导,直到可以提供更新为止。此类指导可能包括禁用 DST 或切换到不同的时区。这些建议总是临时的,因此该功能是否需要存在是值得商榷的。
一般来说,大多数 Windows 用户不应该禁用夏令时。如果他们发现自己需要这样做才能获得正确的当地时间(上述罕见情况除外),他们可能只是没有首先将他们的时区设置为正确的条目。
Ubuntu 和其他操作系统上的 TZDB 时区往往比 Windows 具有更短的更新周期,因此不会受到 short-notice 更改的严重影响。