翻译状态:本文是 System time 的翻译。上次翻译日期:2016-08-26。如果英文版本有所更改,则您可以帮助同步翻译。

一个操作系统通过如下内容确定时间:时间数值、时间标准、时区和夏令时调节(中国已经废止)。本文分别介绍各个部分的定义及如何设置他们。要维护准确的系统时间,请参考 网络时间协议 一文。

硬件时钟和系统时钟

系统用两个时钟保存时间:硬件时钟和系统时钟。

硬件时钟(即实时时钟 RTC 或 CMOS 时钟)仅能保存:年、月、日、时、分、秒这些时间数值,无法保存时间标准(UTC 或 localtime)和是否使用夏令时调节。

系统时钟(即软件时间) 与硬件时间分别维护,保存了:时间、时区和夏令时设置。Linux 内核保存为自 UTC 时间 1970 年1月1日经过的秒数。初始系统时钟是从硬件时间计算得来,计算时会考虑/etc/adjtime的设置。系统启动之后,系统时钟与硬件时钟独立运行,Linux 通过时钟中断计数维护系统时钟。

因为系统时间是按 32 位整数保存的,最大只能记到 2038 年,所以 32 位 Linux 系统将在 2038 年停止工作。

大部分操作系统的时间管理包括如下方面:

启动时根据硬件时钟设置系统时间

运行时通过时间同步联网校正时间

关机时根据系统时间设置硬件时间

读取时间

下面命令可以获得硬件时间和系统时间(硬件时钟按 localtime 显示):

$ timedatectl

设置时间

设置系统时间的本地时间:

# timedatectl set-time "yyyy-MM-dd hh:mm:ss"

例如:

# timedatectl set-time "2014-05-26 11:13:54"

设置时间为2014年,5月26日,11时13分54秒。

时间标准

时间表示有两个标准:localtime 和 UTC(Coordinated Universal Time) 。UTC 是与时区无关的全球时间标准。尽管概念上有差别,UTC 和 GMT (格林威治时间) 是一样的。localtime 标准则依赖于当前时区。

时间标准由操作系统设定,Windows 默认使用 localtime,Mac OS 默认使用 UTC 而 UNIX 系列的操作系统两者都有。使用 Linux 时,最好将硬件时钟设置为 UTC 标准,并在所有操作系统中使用。这样 Linux 系统就可以自动调整夏令时设置,而如果使用 localtime 标准那么系统时间不会根据夏令时自动调整。

通过如下命令可以检查当前设置,systemd 默认硬件时钟为协调世界时(UTC)。

$ timedatectl status | grep local

硬件时间可以用 hwclock 命令设置,将硬件时间设置为 localtime:

# timedatectl set-local-rtc true

硬件时间设置成 UTC:

# timedatectl set-local-rtc false

上述命令会自动生成/etc/adjtime,无需单独设置。

Note: 如果不存在 /etc/adjtime,systemd 会假定硬件时间按 UTC 设置。

系统启动装入 rtc 驱动时可能会根据系统时钟设置硬件时钟。是否设置依赖于平台、内核版本和内核编译选项。如果进行了设置,此时会假定硬件时钟为 UTC 标准,/sys/class/rtc/rtcN/hctosys(N=0,1,2,..) 会设置成 1。后面 systemd 会根据/etc/adjtime重新设置。

如果设置成本地时间,处理夏令时有些麻烦。如果夏令时调整发生在关机时,下次启动时时间会出现问题(更多信息)。最新的内核直接从实时时钟芯片(RTC)读取时间,不使用 hwclock,内核把从 RTC 读取的时间当作 UTC 处理。所以如果硬件时间是地方时,系统启动一开始识别的时间是错误的,之后很快会进行矫正。这可能导致一些问题(尤其是时间倒退时)。

Windows 系统使用 UTC

如果同时安装了 Windows 操作系统(默认使用地方时),那么一般 RTC 会被设置为地方时。Windows 其实也能处理 UTC,需要修改注册表。建议让 Windows 使用 UTC,而非让 Linux 使用地方时。Windows 使用 UTC 后,请记得禁用 Windows 的时间同步功能,以防 Windows 错误设置硬件时间。如上文所说,Linux 可以使用NTP服务来在线同步硬件时钟。

使用 regedit,新建如下 DWORD 值,并将其值设为十六进制的 1。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal

也可以用管理员权限启动命令行来完成:

reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f

如果以上操作不起作用,并且你使用的是 Windows 64位系统,将 DWORD 修改为 QWORD。

如果 Windows 要求根据夏令时更新时钟,可以允许。时钟仍然是 UTC,仅是显示时间会改变。

设置时间标准后需要重新设置硬件时间和系统时间。 updated[断开的链接:无效的部分]。

如果你有时间偏移问题,重新安装

# timedatectl set-timezone America/Los_Angeles

UTC 在Ubuntu的设置

Ubuntu及其衍生发行版会在安装时检测计算机上是否存在Windows,若存在则会默认使用localtime。这是为了让Windows用户能够在不修改注册表的情况下,在Ubuntu内看到正确的时间。

要改变Ubuntu的此问题,你需要做到以下几点。打开文件:

/etc/default/rcS

并改变 UTC 标记为 UTC=yes.

时区

检查当前时区:

$ timedatectl status

显示可用时区:

$ timedatectl list-timezones

修改时区:

# timedatectl set-timezone /

例如:

# timedatectl set-timezone Asia/Shanghai

此命令会创建一个/etc/localtime软链接,指向/usr/share/zoneinfo/中的时区文件,如果手动创建此链接请确保是相对链接而不是绝对链接,参阅archlinux(7).

Note: 如果pre-systemd配置的/etc/timezone仍然存在于你的系统,你可以放心地将其删除,因为它不再使用。

时钟偏移

最能代表“真实时间”的是国际原子时钟),所有的时钟都是有误差的。电子时钟的时间是不准的,但是一般有固定的偏移。这种于基值的差称为“time skew”或“时间偏移”。用 hwclock 设置硬件时间时,会计算每天偏移的秒数。偏移值是原硬件时间与新设置硬件时间的差,并且考虑上次硬件时间设置时的偏移。新的偏移值会在设置时钟时写到文件 /etc/adjtime 。

注意: 如果硬件时间值与原值的差小于 24 小时,偏移量不会重新计算,因为时间过短,无法精确设置偏移。

如果硬件时钟总是过快或过慢,可能是计算了错误的偏移值。硬件时钟设置错误或者时间标准与其他操作系统不一致导致。删除文件 /etc/adjtime 可以删除偏移值,然后设置正确的硬件时钟和系统时钟,并检查时间标准是不是设置正确。

注意: 使用 Systemd 时,要使用 /etc/adjtime中的 drift 值(即无法或不想使用 NTP 时); 需要每次调用 hwclock --adjust命令,可以通过 cron 任务实现。

提高系统时间精度的方法有:

NTP 可以通过网络时间协议同步 Linux 系统的时间。NTP 也会修正中断频率和每秒滴答数以减少时间偏移。并且每隔 11 分钟同步一次硬件时钟。

时钟同步

网络时间协议 (NTP) 是一个通过包交换和可变延迟网络来同步计算机系统时间的协议。下列为这个协议的实现:

NTP 守护进程是这个协议的参考实现,推荐用于时间服务器。它也可以调节中断频率和每秒滴答次数以减少系统时钟误差,使得硬件时钟每隔11秒重新同步一次。

sntp 是 SNTP 客户端。它取代了 ntpdate ,并被推荐用于非服务器环境。

systemd-timesyncd 是一个简单的 SNTP 守护进程。它只实现了客户端,专用于从远程服务器查询时间,更适用于绝大部分安装的情形。

OpenNTPD 是 OpenBSD 项目的一部分,同时实现了客户端和服务器。

Chrony 是一个客户端和服务器,更适合漫游,是为不能始终保持在线的系统而特别设计。

AUR 是简单的命令行 NTP 客户端

Per-user/会话或临时设置

For some use cases it may be useful to change the time settings without touching the global system values. For example to test applications relying on the time during development or adjusting the system time zone when logging into a server remotely from another zone.

To make an application "see" a different date/time than the system one, you can use the faketime (from [断开的链接:package not found] utilities.

If instead you want an application to "see" a different time zone than the system one, set the TZ environment variable, for example:

$ date && export TZ="/usr/share/zoneinfo/Pacific/Fiji" && date

Sa 24. Mai 12:38:26 CEST 2014

Sa 24. Mai 22:38:26 FJT 2014

This is different than just setting the time, as for example it allows to test the behaviour of a program with positive or negative UTC offset values, or the effects of DST changes when developing on systems in a non-DST time zone.

Another use case is having different time zones set for different users of the same system: this can be accomplished by setting the TZ variable in the shell's configuration file, see Environment variables#Defining variables and Autostarting#Shells[断开的链接:无效的部分].

故障排除

时间显示的既不是UTC也不是本地时间

这可能是由多种原因造成的。假如说你的硬件时间使用的是localtime,但timedatectl被设置为使用UTC,结果是你的时区偏移设置被应用了两次,导致系统显示的既不是UTC也不是本地时间。

要强制校准你的时钟,并且让系统写入正确的硬件时间,遵循下面几步:

设置好ntpd(不需要将其作为一个服务来运行);

正确设置你的时区;

运行ntpd -qg,此时在系统和网络进行时间校正时,会忽略本地UTC时间与网络UTC时间之间过大的差异;

运行hwclock --systohc,将当前的正确UTC时间写入硬件时间。

提示和技巧

fake-hwclock

alarm-fake-hwclock designed especially for system without battery backed up RTC, it includes a systemd service which on shutdown saves the current time and on startup restores the saved time, thus avoiding strange time travel errors.

Install[断开的链接:无效的部分] AUR, start and enable the service fake-hwclock.service.

外部资源

arch linux 时间,System time (简体中文)相关推荐

  1. arch linux 时间,archlinux入门--设置时钟 - webdancer's Blog

    如果你的机器是windows7和arch双启动的系统,可能windows与arch时间上出现不同步的问题.这是由于windows与linux对待硬件时钟不一致,即每次操作系统启动时读取硬件时钟,计算系 ...

  2. arch linux对32amd,AMDGPU (简体中文)

    翻译状态:本文是 AMDGPU 的翻译.上次翻译日期:2019-09-02.如果英文版本有所更改,则您可以帮助同步翻译. amdgpu 是 AMD Radeon 显卡的开源图形驱动. 选择正确的驱动 ...

  3. arch linux安装_安装Arch Linux如何使我的旧笔记本电脑重获新生

    arch linux安装 by Jonathan Baldie 乔纳森·巴尔迪(Jonathan Baldie) 安装Arch Linux如何使我的旧笔记本电脑重获新生 (How installing ...

  4. 再次安装Arch Linux!(Vmware,KDE\Gnome桌面,EFI/BIOS引导,双系统配置)更新时间2018/11/11

    1.下载Arch Linux镜像 下载地址:https://www.archlinux.org/download/ 可以看到一个磁力一个种子,任意下载一个并使用支持的下载软件进行镜像的下载. 2(1) ...

  5. 真真切切的100%新手向---安装Arch Linux(更新时间 2018/07-26)

    Arch Linux安装教程 连续安装十几次失败后终于成功的心得... 目录 Arch Linux安装教程 1.下载Arch Linux镜像并制作U盘启动工具 2. 将下载的镜像写入U盘 3. 开始安 ...

  6. arch linux添加用户,Users and groups (简体中文)

    翻译状态:本文是 Users_and_Groups 的翻译.上次翻译日期:2020-06-16.如果英文版本有所更改,则您可以帮助同步翻译. GNU/Linux 通过用户和用户组实现访问控制 -- 包 ...

  7. arch linux简体中文,Locale (简体中文)

    翻译状态:本文是 Locale 的翻译.上次翻译日期:2021-03-31.如果英文版本有所更改,则您可以帮助同步翻译. 区域设置 显示本地化的文字.货币.时间.日期.特殊字符等包含地域属性的内容. ...

  8. arch linux简体中文,Arch Linux Archive (简体中文)

    翻译状态:本文是 Arch_Linux_Archive 的翻译.上次翻译日期:2016-07-20.如果英文版本有所更改,则您可以帮助同步翻译. Related articles Arch Linux ...

  9. Arch Linux 指南——安装基本系统

    目录 Arch Linux 指南--安装基本系统 安装前准备 环境检查 分区 安装 配置基础系统 完成安装 Arch Linux 指南--安装基本系统 本文是自己安装 Arch Linux 的过程,记 ...

最新文章

  1. grpc使用记录(一) gRPC编译(mscv/gcc)
  2. hal库选择滴答时钟函数_STM32入门 : HAL库、标准外设库、LL库
  3. python3 读取配置文件中的参数值替换yaml文件中的占位符(变量)
  4. node.js小技巧——使用 supervisor
  5. linux 系统调用时怎么知道当前上下文属于那个进程,linux – 编写系统调用来计算进程的上下文切换...
  6. 差分数组|小a的轰炸游戏-牛客317E
  7. Q121:PBRT-V3,光传播方程(The Light Transport Equation)(14.4章节)
  8. 软件基本功能测试用例,测试用例实例—常见功能测试点().docx
  9. Tomcat详解(二)——tomcat安装与配置
  10. mfc中句柄与指针的区别
  11. 各种VC9 VC11版本的Apache
  12. unity aspon word excel ppt pdf转图片
  13. ajax里的data的用法,Jquery中ajax方法data参数的用法
  14. MSOCache是什么文件啊?
  15. AutoCAD 2007打开慢
  16. VB编程:UCase转大写,LCase转小写-4_彭世瑜_新浪博客
  17. 正规的伦敦金投资平台排行榜
  18. Error Cannot find module ‘CUsersAppDataRoamingnpmnode_modules..错误,解决方法
  19. [4G5G专题-93]:流程 - 4G LTE 终端在RRC 连接状态下的小区切换通用过程
  20. theano 训练样本制作(二)

热门文章

  1. 听音乐不过瘾?自制一个音乐播放器!| 原力计划
  2. 马云曾卖鲜花,柳传志卖冰箱!摆摊吧,程序员!
  3. Ruby 之父:编程要给程序员带来乐趣
  4. 你的城市撒币了吗?Python 爬取分析全国消费券发放数据
  5. 《原力计划【第二季】》第 7 周周榜揭晓!!!
  6. 美团外卖回应佣金争议;苹果回应戴口罩解锁 iPhone;新 Edge 浏览器明年将不再支持 Win7 | 极客头条...
  7. 华为发布近2万元折叠屏手机Mate Xs;iPhone 12或支持WiFi新标;Electron 6.1.8发布 | 极客头条...
  8. 20行 Python 代码爬取王者荣耀全英雄皮肤 | 原力计划
  9. 17大主链均狂跌国内项目却看涨, 本周不可不知的7组榜单 | 数据周榜
  10. 字节跳动入局全网搜索;思科回应中国区裁员;IntelliJ IDEA 新版发布! | 极客头条...