系统的时间相关设置hwclock,date,tzset,tzselect

2015-08-13 0 By admin

当服务器启动时,会从硬件时钟中读取当前时间;虽然硬件时钟中的时间可能不正确。

当服务器中运行的应用程序需要读取或者修改时间,会和操作系统中的时间功能模块进行交互。

由上我们知道系统中最少存在两个时间。1、硬件时钟从根本上讲是CMOS时钟;2、内核维护的操作系统时钟。

一、硬件时钟服务

硬件时钟是通过主板中CMOS芯片实现的,由主板上一块电池供电;在机器关机后,硬件时钟依然可以正常工作。时钟依据主板石英晶体振荡器频率工作,可以通过BIOS设置调整硬件时钟的时间。

操作系统启动时,会从硬件时钟获取到时间信息;之后一般情况就不会再有交互沟通了。操作系统调整系统时间或者与Internet时间同步后,都不会更改硬件时钟中的时间。

1、硬件时钟时间的一般操作

1、查看硬件时钟
命令为:hwclock --show
2、更新机器的硬件时间
命令为:hwclock --adjust
硬件时钟通常被设置成全球标准时间(UTC),而将时区信息保存在/usr/share/lib/timezone (或者在某些系统中可能是/usr/local/timezone)目录下某个适当的文件中,然后用一个符号链接文件/etc/localtime指向它。
3、重置硬件时钟用
命令为:hwclock --set --date=mm/dd/yy hh:MM:ss"

二、系统时钟服务

Linux 系统时间由系统内核维护,我们可以通过 Linux 系统发行版提供的工具对其进行管理。其中涉及到时间和时区的管理。

1、修改系统时间

命令为:date -s,–set  设置系统时间; 使用date -R 可以查看系统当前时区
(1)将时间调整为10月11日凌晨1点55分:data  -s 10110155
(2)将系统时间设定成2005年8月8日:      date -s 2005/08/08
(3)将系统时间设定成下午8点12分0秒:  date -s 20:12:00
为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS。
由于该同步是每隔一段时间(大约是11分钟)进行的,在执行完 date -s 命令后,如果马上重起系统,修改的时间就有可能没有被写入CMOS。
如果要确保修改生效,最好再使用 clock -w 这个命令将系统时间强行写入CMOS。

2、修改时区

命令为:tzset
如果系统中没有这条命令,那可以用类似下面的操作:
ln -s /etc/localtime /usr/share/zoneinfo/US/Pacific

3、选择时区信息

命令为:tzselect
根据系统提示,选择相应的时区信息。

三、格式化获取系统时间Date 命令

date 命令使用说明

-d,–date=字符串 显示指定字符串所描述的时间,而非当前时间
-f,–file=日期文件 类似–date,从日期文件中按行读入时间描述
-r, –reference=文件 显示文件指定文件的最后修改时间
-R, –rfc-2822 以RFC 2822格式输出日期和时间;例如:2006年8月7日,星期一 12:34:56 -0600
–rfc-3339=TIMESPEC 以RFC 3339 格式输出日期和时间。TIMESPEC=`date’,`seconds’,或 `ns’
-s, –set=字符串 设置指定字符串来分开时间
-u, –utc, –universal 输出或者设置协调的通用时间

格式化输出时间,字符含义

  1. %% : 一个文字的 %
  2. %a : 当前locale 的星期名缩写(例如: 日,代表星期日)
  3. %A : 当前locale 的星期名全称 (如:星期日)
  4. %b : 当前locale 的月名缩写 (如:一,代表一月)
  5. %B : 当前locale 的月名全称 (如:一月)
  6. %c : 当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25)
  7. %C : 世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20)
  8. %d : 按月计的日期(例如:01)
  9. %D : 按月计的日期;等于%m/%d/%y
  10. %e : 按月计的日期,添加空格,等于%_d
  11. %F : 完整日期格式,等价于 %Y-%m-%d
  12. %g : ISO-8601 格式年份的最后两位 (参见%G)
  13. %G : ISO-8601 格式年份 (参见%V),一般只和 %V 结合使用
  14. %h : 等于%b
  15. %H : 小时(00-23)
  16. %I : 小时(00-12)
  17. %c : 按年计的日期(001-366)
  18. %k : 时(0-23)
  19. %l : 时(1-12)
  20. %m : 月份(01-12)
  21. %M : 分(00-59)
  22. %n : 换行
  23. %N : 纳秒(000000000-999999999)
  24. %p : 当前locale 下的”上午”或者”下午”,未知时输出为空
  25. %P : 与%p 类似,但是输出小写字母
  26. %r : 当前locale 下的 12 小时时钟时间 (如:11:11:04 下午)
  27. %R : 24 小时时间的时和分,等价于 %H:%M
  28. %s : 自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数
  29. %S : 秒(00-60)
  30. %t : 输出制表符 Tab
  31. %T : 时间,等于%H:%M:%S
  32. %u : 星期,1 代表星期一
  33. %U : 一年中的第几周,以周日为每星期第一天(00-53)
  34. %V : ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53)
  35. %w : 一星期中的第几日(0-6),0 代表周一
  36. %W : 一年中的第几周,以周一为每星期第一天(00-53)
  37. %x : 当前locale 下的日期描述 (如:12/31/99)
  38. %X : 当前locale 下的时间描述 (如:23:13:48)
  39. %y : 年份最后两位数位 (00-99)
  40. %Y : 年份
  41. %z +hhmm : 数字时区(例如,-0400)
  42. %:z +hh:mm : 数字时区(例如,-04:00)
  43. %::z +hh:mm:ss : 数字时区(例如,-04:00:00)
  44. %:::z : 数字时区带有必要的精度 (例如,-04,+05:30)
  45. %Z : 按字母表排序的时区缩写 (例如,EDT)

[root@cn-blogs archives]# date "+%Y-%m-%d %H:%M:%S"
2019-04-22 14:45:51