geekdoc-linux-zh/docs/linux-101-hack/linux-101-hack_04.md

4.8 KiB
Raw Permalink Blame History

第四章 - 日期设置

这一章介绍了 5 个关于日期设置的命令.

Hack-33 设置系统时间

设置系统时间

date这个命令是用来显示/设置时间的.

如果要设置本系统的时间, 命令如下:

$ date {mmddhhmiyyyy.ss} 

其中:

  • mm 几月, 两位
  • dd 几号, 两位
  • hh 几点, 两位
  • mi 几分, 两位
  • yyyy 哪一年, 四位
  • ss 第几秒, 两位

例如, 设置日期为 1995 年 4 月 3 日 2 点 1 分 0 秒:

$ date 040302011995.00 #需要 root 权限 

如果只设置时间(不包括年月日):

$ date +%T -s "22:19:53"
$ date +%T%p -s "10:19:53PM" 

Hack-34 设置硬件时间

设置硬件时间

硬件时间和系统时间有什么区别吗?

当然有了, 硬件时间是主板上的时间, 而系统时间则是系统里面的时间.

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

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

系统时钟(即软件时间) 与硬件时间分别维护保存了时间、时区和夏令时设置。Linux 内核保存为自 UTC 时间 1970 年 1 月 1 日经过的秒数。系统启动之后系统时钟与硬件时钟独立运行Linux 通过时钟中断计数维护系统时钟。

via: wiki.archlinux.org

如果你有双系统的话, 你就会发现, Linux 上的时间和 Windows 上的时间相差 8 个小时, 这是为什么呢? 因为两种系统读时间的姿势不对, 虽然他们都是从主板里面读取时间, 但是 Windows 默认的读法是直接读, 也就是说, 主板里写的是啥, 他就读成啥, 但是 Linux 呢, Linux 就会把主板里的时间换算成 UTC, UTC 是啥? 国际时间, 格林尼治时间, 然后看一下我们在中国,+8 区, 再加 8 个小时, 所以双系统的情况下就会相差 8 个小时了.

欲知详情, 请看: linux 系统时间和硬件时钟问题

几个命令:

  • 显示硬件时间 hwclock
  • 设置硬件时间为系统时间 hwclock systohc

Hack-35 格式化日期

格式化日期

下面的例子是用不同的格式来显示当前日期:

➤ date
2016 年 01 月 04 日 星期一 16:56:44 CST
➤ date --date='now'
2016 年 01 月 04 日 星期一 16:56:55 CST
➤ date --date='tomorrow'
2016 年 01 月 05 日 星期二 16:56:59 CST
➤ date --date='yestoday'
date: invalid date yestoday
➤ date --date='today'
2016 年 01 月 04 日 星期一 16:57:11 CST
➤ date --date='1970-01-01 00:00:01 UTC +5 hours' +%s
18001
➤ date '+Current Date: %m/%d/%y%nCurrent Time:%H:%M:%S'
Current Date: 01/04/16
Current Time:16:57:25
➤ date +"%d-%m-%Y"
04-01-2016
➤ date +"%d/%m/%Y"
04/01/2016
➤ date +"%A,%B %d %Y"
星期一,一月 04 2016
➤ 

解释相关选项:

  • %D 日期 (mm/dd/yy)
  • %d 第几号 (01..31)
  • %m 月份 (01..12)
  • %y 年份的后两位 (00..99)
  • %a 周几 (Sun..Sat)
  • %A 周几 (Sunday..Saturday)
  • %b 月份 (Jan..Dec)
  • %B 月份 (January..December)
  • %H 几点 (00..23)
  • %I 几点 (01..12)
  • %Y 年份 (1970...)

date还有一个很有用的功能就是转换时间戳, 比如, 把现在的时间转换成 Unix 时间戳:

➤ date +%s
1451901927 

这个时间戳, 就是从 1970-1-1 数过来的秒数.

Hack-36 显示过去的时间

显示过去的时间

这里没什么好说的.

$ date --date='3 seconds ago'
Thu Jan
1 08:27:00 PST 2009
$ date --date="1 day ago"
Wed Dec 31 08:27:13 PST 2008
$ date --date="1 days ago"
Wed Dec 31 08:27:18 PST 2008
$ date --date="1 month ago"
Mon Dec
1 08:27:23 PST 2008
$ date --date="1 year ago"
Tue Jan
1 08:27:28 PST 2008
$ date --date="yesterday"
Wed Dec 31 08:27:34 PST 2008
$ date --date="10 months 2 day ago"
Thu Feb 28 08:27:41 PST 2008 

Hack-37 显示未来的时间

显示未来的时间

同样也没什么好说的.

$ date
Thu Jan
1 08:30:07 PST 2009
$ date --date='3 seconds'
Thu Jan
1 08:30:12 PST 2009
$ date --date='4 hours'
Thu Jan
1 12:30:17 PST 2009
$ date --date='tomorrow'
Fri Jan
2 08:30:25 PST 2009
$ date --date="1 day"
Fri Jan
2 08:30:31 PST 2009
$ date --date="1 days"
Fri Jan
2 08:30:38 PST 2009
$ date --date="2 days"
Sat Jan
3 08:30:43 PST 2009
$ date --date='1 month'
Sun Feb
1 08:30:48 PST 2009
$ date --date='1 week'
Thu Jan
8 08:30:53 PST 2009
$ date --date="2 months"
Sun Mar
1 08:30:58 PST 2009
$ date --date="2 years"
Sat Jan
1 08:31:03 PST 2011
$ date --date="next day"
Fri Jan
2 08:31:10 PST 2009
$ date --date="-1 days ago"
Fri Jan
2 08:31:15 PST 2009
$ date --date="this Wednesday"
Wed Jan
7 00:00:00 PST 2009