目录

  • 时间概述
  • Linux 中两个时钟
    • date --> 系统时钟
    • hwclock --> 硬件时钟
  • 如何查看和设置时区
    • 查看时区
    • 设置时区
      • tzselect
    • timedatectl
  • cal 日期

时间概述

如何表示时间其实是一个比较复杂的问题,因为在地球环绕太阳旋转的24小时中,世界各地日出日落的时间是不同的,因此有划分时区(timezone)的必要,也就是把全球划分成24个不同的时区。我们可以把时间的定义理解为一个时间的值加上所在地的时区值(注意这个所在地可以精确到城市)。

在地理课上,我们学过格林威治时间(GMT),它就是 0 时区时间。但是我们在计算机中经常看到的是 UTC(Coordinated Universal Time 的简写,协调世界时,又称世界统一时间、世界标准时间、国际协调时间),UTC 是经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的新时标以及以「秒」为单位的国际原子时所综合精算而成的时间,计算过程相当严谨精密,因此若以「世界标准时间」的角度来说,UTC比GMT来得更加精准。其误差值必须保持在0.9秒以内,若大于0.9秒则由位于巴黎的国际地球自转事务中央局发布闰秒,使UTC与地球自转周期一致。所以 UTC 的本质强调的是比GMT更为精确的世界时间标准。

如果中国当地时间是晚上8点钟整,我们可以使用以下两种表示方式:

20:00 CST
#或
12:00 UTC

这里的 CST 是 Chinse Standard Time(中国标准时间),也就是我们通常所说的北京时间了。因为中国处在 UTC+8 时区,即所谓的东 8 区,从而推断 UTC 为 12:00了。

虽然电脑中可以显示不同的时区的时间,其实电脑中只保留了一个时间值,那就是 UTC+0 的时间,想要得到不同时区的时间,只能通过设置不同的时区来获得。另外,还有一个称为夏令时 DST 概念,那是因为夏季太阳出来早,为了充分利用阳光,把时间拨快一定时间,到秋天拨慢回时间。

Linux 中两个时钟

Linux 有两个时钟,一个是 System Clock(系统时钟),另一个是 Hardware Clock(硬件时钟)。而在windows中只有一个硬件时钟。可以使用 datehwclock 分别查看系统时钟和硬件时钟。

  • 硬件时钟也称为实时时钟(RTC,real time clock)或 CMOS 时钟,它独立于任何软件,在电脑关机后仍然在运行,个人电脑上是依靠主板上的纽扣电池供电。

  • 系统时钟:由 Linux Kernel(内核)维护,系统时钟在开机时会和硬件时钟同步,然后由计时器中断驱动。系统时钟记录的是自 1970-01-01 00:00:00经过的总秒数,它并不是一个整数,其精度是虚拟无穷的。

既然两个时钟是独自运行的,那么时间久了这两个时钟就会产生误差,相互之间存在一定的漂移。可以通过执行 datehwclock 命令查看。

在CentOS 8 上已 root 登录
# date;hwclock
Wed Oct 12 10:13:12 CST 2022
2022-10-12 10:13:12.553904+08:00
# 如果在Ubuntu上以普通账号登录,使用 hwclock 不能正常使用
$ hwclock
hwclock: Cannot access the Hardware Clock via any known method.
hwclock: Use the --verbose option to see the details of our search for an access method.
$ sudo hwclock
2022-10-12 02:01:35.096325+00:00# 需要使用 sudo hwclock 才能执行
$ date; sudo hwclock
Wed 12 Oct 2022 02:16:18 AM UTC
2022-10-12 02:16:19.301469+00:00

date --> 系统时钟

date 命令用于显示或设置系统时间和日期。其使用格式为:

date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

如果不带参数和显示格式

# date
Wed Oct 12 10:25:21 CST 2022

可以带显示格式,例如:

# date +"%F %T"
2022-10-12 10:25:57

设置时间和日期

# 后面的格式是:月日年.秒,月日两位,年可以两位和四位
# date 121210302025.30
Fri Dec 12 10:30:30 CST 2025# 也可以使用以下方式设置,这个看起来比较符合我们习惯
# date -s "2023-10-13 10:25:30"
Fri Oct 13 10:25:30 CST 2023

hwclock --> 硬件时钟

hwclock 是时钟的管理工具。它可以:显示硬件时钟时间;将硬件时钟设置为指定时间;根据系统时钟设置硬件时钟;根据硬件时钟设置系统时钟;补偿硬件时钟漂移;更正系统时间刻度;设置内核的时区、NTP时间刻度和epoch(仅Alpha);并根据漂移率预测未来的硬件时钟值。

使用格式为:

hwclock [function] [option...]

我们经常使用的命令演示如下:

可以使用以下命令查询硬件时钟:

# 其默认使用功能
# hwclock
2022-10-12 10:18:53.703334+08:00

可以不带 --show,这是默认的,这可以查询到机器上的本地时区的硬件时钟。

如果想要根据硬件时钟调整系统时钟,可以使用以下其中之一:

# hwclock --hctosys
# hwclock -s

想要根据系统时钟调整硬件时钟,可以使用以下其中之一:

# hwclock --systohc
# hwclock -w

如何查看和设置时区

查看时区

# ll /etc/localtime
lrwxrwxrwx. 1 root root 35 Oct 12 09:48 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai# 而在Ubuntu中可以使用这个方式查询时区,在CentOS中没有该文件
$ cat /etc/timezone
Asia/Shanghai

在Linux中glibc提供了事先编译好的许多 timezone 文件,它们都存放在 /usr/share/zoneinfo 这个目录下,这里基本涵盖了大部分的国家和城市。

# ls -F /usr/share/zoneinfo/
Africa/      EST5EDT      Jamaica      PRC
America/     Etc/         Japan        PST8PDT
Antarctica/  Europe/      Kwajalein    right/
Arctic/      GB           leapseconds  ROC
Asia/        GB-Eire      Libya        ROK
Atlantic/    GMT          MET          Singapore
Australia/   GMT+0        Mexico/      Turkey
Brazil/      GMT-0        MST          tzdata.zi
Canada/      GMT0         MST7MDT      UCT
CET          Greenwich    Navajo       Universal
Chile/       Hongkong     NZ           US/
CST6CDT      HST          NZ-CHAT      UTC
Cuba         Iceland      Pacific/     WET
EET          Indian/      Poland       W-SU
Egypt        Iran         Portugal     zone1970.tab
Eire         iso3166.tab  posix/       zone.tab
EST          Israel       posixrules   Zulu

如果我们想要查看对应时区的当前时间,可以使用:

使用zdump命令可以在命令行上显示指定的每个区域名称的当前时间。

$ zdump china
china  Wed Oct 12 02:47:12 2022 china
sam@Ubuntu22:~$ zdump hongkong
hongkong  Wed Oct 12 02:47:18 2022 hongkong
zdump: warning: zone "hongkong" abbreviation "hongkong" has more than 6 characters
$ zdump hongk
hongk  Wed Oct 12 02:47:37 2022 hongk

该命令在参数部分提供超过6个字符时,会出现警告。

设置时区

想要设置时区可以有以下方法:

tzselect

使用 tzselect 交互式命令,该命令在Linux低版本中也可以使用。

设置TZ环境变量的值。许多程序和命令都会使用这个变量的值。TZ的值可以有多种格式,最简单的设置方法是使用:

$ tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".1) Africa2) Americas3) Antarctica4) Asia5) Atlantic Ocean6) Australia7) Europe8) Indian Ocean9) Pacific Ocean
10) coord - I want to use geographical coordinates.
11) TZ - I want to specify the timezone using the Posix TZ format.
#? 4
Please select a country whose clocks agree with yours.1) Afghanistan                   20) Iran                   39) Palestine2) Antarctica                   21) Iraq                   40) Philippines3) Armenia                    22) Israel                 41) Qatar4) Azerbaijan                   23) Japan                  42) Réunion5) Bahrain                    24) Jordan                 43) Russia6) Bangladesh                  25) Kazakhstan             44) SaudiArabia7) Bhutan                     26) Korea (North)          45)  Seychelles8) Brunei                     27) Korea (South)          46) Singapore9) Cambodia                 28) Kuwait                 47) Sri Lanka
10) China                      29) Kyrgyzstan             48) Syria
11) Christmas Island           30) Laos                   49) Taiwan
12) Cocos (Keeling) Islands    31) Lebanon                50) Tajikistan
13) Cyprus                     32) Macau                  51) Thailand
14) East Timor                 33) Malaysia               52) Turkmenistan
15) French Southern & Antarctic Lands  34) Mongolia       53) United Arab Emirates
16) Georgia                    35) Myanmar (Burma)        54) Uzbekistan
17) Hong Kong                  36) Nepal                  55) Vietnam
18) India                      37) Oman                   56) Yemen
19) Indonesia                  38) Pakistan
#? 10
Please select one of the following timezones.
1) Beijing Time
2) Xinjiang Time, Vostok
#? 1The following information has been given:ChinaBeijing TimeTherefore TZ='Asia/Shanghai' will be used.
Selected time is now:   Wed Oct 12 10:52:42 CST 2022.
Universal Time is now:  Wed Oct 12 02:52:42 UTC 2022.
Is the above information OK?
1) Yes
2) No
#? 1You can make this change permanent for yourself by appending the lineTZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai

想要永久修改这个TZ环境变量的值,可以采用以下方法:把以下这行代码,添加到你的家目录 .profile 中,然后登出及再次登录。

TZ='Asia/Shanghai'; export TZ

这样,TZ变量的值会覆盖 /etc/localtime 的值。如果想要永久修改系统的时区,可以在/etc/profile 添加TZ变量的值。

timedatectl

该命令在CentOS 7 开始或者Ubuntu可用。其用于控制系统时间和日期。

使用的语法为:

$ timedatectl [OPTIONS...] {COMMAND}# 显示默认的状态值:
$ timedatectl Local time: Wed 2022-10-12 12:13:16 CSTUniversal time: Wed 2022-10-12 04:13:16 UTCRTC time: Wed 2022-10-12 04:13:16Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: noNTP service: n/aRTC in local TZ: no

先查询有哪些时区及格式,然后进行时区的设置,该命令会同时改变内存中的和文件中的值。

$ timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Asmera
Africa/Bamako
Africa/Bangui
Africa/Banjul
......$ sudo timedatectl set-timezone Asia/Shanghai
$ ll /etc/localtime
lrwxrwxrwx 1 root root 33 Oct 12 03:14 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai

也可以设置时间和日期,并可同时改变系统时间和硬件时间。

timedatectl set-time '2022-12-12 06:06:30'

可以设置是否启用 ntp

$ timedatectl Local time: Wed 2022-10-12 15:17:24 CSTUniversal time: Wed 2022-10-12 07:17:24 UTCRTC time: Wed 2022-10-12 07:17:23    Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes                        NTP service: inactive                   RTC in local TZ: no$ sudo timedatectl set-ntp on
$ timedatectl Local time: Wed 2022-10-12 15:18:43 CSTUniversal time: Wed 2022-10-12 07:18:43 UTCRTC time: Wed 2022-10-12 07:18:43    Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes                        NTP service: active                     RTC in local TZ: no

cal 日期

# 当月
# calOctober 2022
Su Mo Tu We Th Fr Sa  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
、
# 当前年
$ cal -y2022January               February               March
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  1         1  2  3  4  5         1  2  3  4  5  2  3  4  5  6  7  8   6  7  8  9 10 11 12   6  7  8  9 10 11 12  9 10 11 12 13 14 15  13 14 15 16 17 18 19  13 14 15 16 17 18 19
16 17 18 19 20 21 22  20 21 22 23 24 25 26  20 21 22 23 24 25 26
23 24 25 26 27 28 29  27 28                 27 28 29 30 31
30 31                                                             April                  May                   June
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  1  2   1  2  3  4  5  6  7            1  2  3  4  3  4  5  6  7  8  9   8  9 10 11 12 13 14   5  6  7  8  9 10 11
10 11 12 13 14 15 16  15 16 17 18 19 20 21  12 13 14 15 16 17 18
17 18 19 20 21 22 23  22 23 24 25 26 27 28  19 20 21 22 23 24 25
24 25 26 27 28 29 30  29 30 31              26 27 28 29 30        July                 August              September
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  1  2      1  2  3  4  5  6               1  2  3  3  4  5  6  7  8  9   7  8  9 10 11 12 13   4  5  6  7  8  9 10
10 11 12 13 14 15 16  14 15 16 17 18 19 20  11 12 13 14 15 16 17
17 18 19 20 21 22 23  21 22 23 24 25 26 27  18 19 20 21 22 23 24
24 25 26 27 28 29 30  28 29 30 31           25 26 27 28 29 30
31                                                                October               November              December
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  1         1  2  3  4  5               1  2  3  2  3  4  5  6  7  8   6  7  8  9 10 11 12   4  5  6  7  8  9 10  9 10 11 12 13 14 15  13 14 15 16 17 18 19  11 12 13 14 15 16 17
16 17 18 19 20 21 22  20 21 22 23 24 25 26  18 19 20 21 22 23 24
23 24 25 26 27 28 29  27 28 29 30           25 26 27 28 29 30 31
30 31   # 指定月
$ cal 10 2035October 2035
Su Mo Tu We Th Fr Sa  1  2  3  4  5  6  7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

其中一个特别的日期是,有关原因请自行查询。

# cal 9 1752September 1752
Su Mo Tu We Th Fr Sa  1  2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Linux 有关时间日期和时区设置相关推荐

  1. Linux系统时间、系统时区和时钟同步的部分理解

    1.写在前面 因为最近一段时间以来,本人在项目遇到的因为Linux系统时间所引发的问题比较多,所以在此进行总结. 2.Linux系统时间与BIOS硬件时间之间的关系 2.1.RTC芯片.i2c总线和B ...

  2. ARM Linux RTC 时间的读取与设置

    问题描述 这里的平台是 i.MX6 Yocto Linux,没有使用 NTP 对时服务,而是使用我们自己对时机制.RTC 芯片是 PCF8563T,不使用 SoC 上的 RTC.Linux 系统使用 ...

  3. 华为手机如何调时间显示_华为手机照相有时间日期显示怎样设置

    华为手机照相有时间日期显示设置方法如下: 1.在手机界面找到图库点击打开. 2.进入图库后选择一张照片打开. 3.打开图片后.点击下图所示右上角的选项. 4.进入后会看到显示拍摄时间和拍摄地点没有打开 ...

  4. docker 时间不一致,时区设置

    遇到docker时间不一致,大多是因为默认时区没有设置导致,一般在宿主机上使用 date 命令看到的是 CTS 时间,进入docker后使用 date 命令查看的是 UTC 时间. CTS: Chin ...

  5. django时间问题和时区设置

    django里默认设置了一个时区,我在django里调time获取时间,与系统时间出现不一致的情况,所以我们需要重启设置时区,如下: 在settings.py里面把TIME_ZONE设为:Etc/GM ...

  6. html设置滚动字幕时间,日期滚动条怎么设置

    如下exceL中左上角有个滚动条控件,可以用它滑动显滚动条只是一个控件,返回只是一些整数,每次一个整数 实际上只是做为函数引用中的一个偏移值 EXCEL表单控件滚动条问题,如何用滚动条控制时间显需要用 ...

  7. linux时间与日期函数,Linux时间日期函数

    最近跑实验的时候需要获取函数的执行时间,因此变在网上搜集整理了,在Linux下跟时间有关的函数,保存在此,以备不时之需- asctime(将时间和日期以字符串格式表示) 相关函数 time,ctime ...

  8. 嵌入式linux通过程序设置系统时间,嵌入式新手如何设定Linux的时间函数

    一.时间相关说明 格林威治时间表示0时区的标准时间.其他时区的时间和此标准时间均有时间差.UTC(UniversalTime Coordinated)是世界协调时间,是格林威治时间在互联网中的表示方法 ...

  9. linux系统时间函数,Linux时间时区详解与常用时间函数

    时间与时区 整个地球分为二十四时区,每个时区都有自己的本地时间. UTC时间 与 GMT时间 我们可以认为格林威治时间就是时间协调时间(GMT = UTC),格林威治时间和UTC时间都用秒数来计算的. ...

最新文章

  1. cookies的详细使用说明
  2. Servlet 的常见错误总结
  3. 『TCP/IP详解——卷一:协议』读书笔记——03
  4. GDCM:独特的uid测试程序
  5. Python|队列Queue
  6. Linux编程练习 --多线程5--信号量(semaphore)
  7. python 安装echarts
  8. php怎麼开bcmath_php-如何启用BCMath CentOS 6
  9. 创建一棵二叉树(C++)以及遍历
  10. 计算机创建不了文本文档,电脑系统没有新建文本文档怎么解决?
  11. 遗传算法的C语言设计
  12. 个人简历表格 个人简历word百度云 完整个人简历样本
  13. java开发季度绩效自评,季度绩效考核英文自我评价
  14. kernel 打印时间戳
  15. 电脑蓝屏个人解决办法————由程序引起的
  16. 三国论(11-15章)
  17. 基金 thread.php,这个时候,我们可以为基金“上会通过”做点什么?(附方案) - 基金申请 - 小木虫 - 学术 科研 互动社区...
  18. 时间管理软件 压力测试软件JMeter 微信小程序可视化代码生成 黑客网站
  19. LeetCode-5299. 找到一个数字的 K 美丽值_Python
  20. 什么是.NET框架?什么是ASP.NET?什么是.net framework?它们的关系是什么?

热门文章

  1. 关于电商商品数据API接口列表,你想知道的(详情页、Sku信息、商品描述、评论问答列表)
  2. 如何在 FoxyProxy 中设置 YiLu Proxy
  3. java:常见的日期转型,“Tue Oct 18 00:00:00 CST 2022“
  4. LaTeX Beamer 笔记 —— 用LaTeX做演示文稿
  5. 线上直播 线下分享丨这样的2019 ACOUG年会你绝对喜欢!
  6. Will的替代词汇_59
  7. OpenCV—python 显着性检测二
  8. HttpRunnerManager + Jenkins接口自动化测试平台搭建
  9. 4.2.2 屏幕保护程序
  10. 敏捷开发,持续集成/交付/部署, DevOps总结