linux中时间参数的前几天,Linux中date、time、clock等时间相关的介绍和使用

本文将介绍linux中date命令的使用和技巧,列举了如参数、输出、设置、转换、时间戳等,示例并对注意点进行了说明。

本文也介绍了系统时间和硬件时间的区别,另外,对于time命令也进行了简单的说明。

date命令

date -help亦可查看。

命令功能

Linux系统里自带的一个系统命令,可以以给定的格式显示当前时间,或是设置系统日期。

命令格式

在date命令中,默认显示的结果里包括很多信息,特别是做为文件名输出时,不是很方便,但好在里包含格式化输出的选项:

date [OPTION]... [+FORMAT]

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

常用参数

如果命令没有带任何参数时,则默认显示系统当期时间,输出时间为:格林威治时间,并把日期和时间按CST格式输出。

-d, --date=STRING

显示由 STRING 指定的时间, 而不是当前时间

-f, --file=DATEFILE

显示 DATEFILE 中每一行指定的时间, 如同将 DATEFILE 中的每行作为 --date 的参数一样

-I[FMT], --iso-8601[=FMT]

按照 ISO-8601 的日期/时间格式输出时间.

FMT=`date' (或者不指定时)仅输出日期,等于 `hours', `minutes', 或`seconds' 时按照指定精度输出日期及时间.

-r, --reference=FILE

显示 FILE 的最后修改时间

-R, --rfc-822

根据 RFC-822 指定格式输出日期

-s, --set=STRING

根据 STRING 设置时间

-u, --utc, --universal

显示或设置全球时间(格林威治时间)

--help

显示本帮助文件并退出

--version

显示版本信息并退出

格式 FORMAT 控制着输出格式. 仅当选项指定为全球时间时本格式才有效。 分别解释如下:

%% 文本的 %

%a 当前区域的星期几的简写 (Sun..Sat)

%A 当前区域的星期几的全称 (不同长度) (Sunday..Saturday)

%b 当前区域的月份的简写 (Jan..Dec)

%B 当前区域的月份的全称(变长) (January..December)

%c 当前区域的日期和时间 (Sat Nov 04 12:02:33 EST 1989)

%d (月份中的)几号(用两位表示) (01..31)

%D 日期(按照 月/日期/年 格式显示) (mm/dd/yy)

%e (月份中的)几号(去零表示) ( 1..31)

%h 同 %b

%H 小时(按 24 小时制显示,用两位表示) (00..23)

%I 小时(按 12 小时制显示,用两位表示) (01..12)

%j (一年中的)第几天(用三位表示) (001..366)

%k 小时(按 24 小时制显示,去零显示) ( 0..23)

%l 小时(按 12 小时制显示,去零表示) ( 1..12)

%m 月份(用两位表示) (01..12)

%M 分钟数(用两位表示) (00..59)

%n换行

%N纳秒  (000000000..999999999)

%p当前时间是上午 AM 还是下午 PM

%r 时间,按 12 小时制显示 (hh:mm:ss [A/P]M)

%s 从 1970年1月1日0点0分0秒到现在历经的秒数 (GNU扩充)

%S 秒数(用两位表示)(00..60)

%t 水平方向的 tab 制表符

%T 时间,按 24 小时制显示(hh:mm:ss)

%U (一年中的)第几个星期,以星期天作为一周的开始(用两位表示) (00..53)

%V (一年中的)第几个星期,以星期一作为一周的开始(用两位表示) (01..52)

%w 用数字表示星期几 (0..6); 0 代表星期天

%W (一年中的)第几个星期,以星期一作为一周的开始(用两位表示) (00..53)

%x 按照 (mm/dd/yy) 格式显示当前日期

%X 按照 (%H:%M:%S) 格式显示当前时间

%y 年的后两位数字 (00..99)

%Y 年(用 4 位表示) (1970...)

%z 按照 RFC-822 中指定的数字时区显示(如, -0500) (为非标准扩充)

%Z 时区(例如, EDT (美国东部时区)), 如果不能决定是哪个时区则为空

默认情况下,日期的数字区域以0 填充,比如2020年02月16日会表示成2020-02-16。

以下可选标记可以跟在"%"后:

- (连字符)  不填充该域

_ (下划线)  以空格填充

0       (数字0)以0 填充

^       如果可能,使用大写字母

#       如果可能,使用相反的大小写

在任何标记之后还允许一个可选的域宽度指定,它是一个十进制数字。

作为一个可选的修饰声明,它可以是E,在可能的情况下使用本地环境关联的

表示方式;或者是O,在可能的情况下使用本地环境关联的数字符号。

输出系统时间

#默认显示,等同于:date -u 。 Sun Feb 16 18:33:00 CST 2020

date

#输出指定格式: YYYY/MM/DD hh:mm:ss.zzzzzzzzz 2020/02/16 18:36:57.324679800

date '+%Y/%m/%d %H:%M:%S.%N'

# 输出完整日期和时间,等同于 “ %Y-%m-%d %H:%M:%S” 2020-02-17 18:46:55

date "+%F %T"

注意1:若是 不以 加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss]。其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数。

注意2:当不希望出现无意义的 0 时(比如说 1999/03/07),则可以在标记中插入 - 符号。比如说 date '+%-H:%-M:%-S' 会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4。

设置系统时间

#设置完整的时间

date -s "2020-02-16 18:24:34"

date -s "18:24:34 2020-02-16"

#设置日期,由于没有设置时间,所以时间都是00:00:00

date -s "2020-02-17"

date -s "20200216"

#设置具体时间,不会对日期做更改

date -s "01:01:01"

注意:设置时间时,不支持毫秒、微秒、纳秒的设置,只支持秒级别。

时间转换操作

需使用:-d参数,可将指定的时间字符串,按照指定的格式输出(并不会改动系统时间)。

# 转换指定日期为Unix时间戳:

date -d “'2020-02-16 18:35:05' +%s"

Unix时间戳转换为日期时间:

date -d "@1581849305" "+%Y-%m-%d %H:%M:%S"

注意1:秒点时,参数前面一定要带上@参数。

注意2:数据转换照样只支持秒点级别以上的计算。

时间戳、秒点、微秒、毫秒和纳秒

Unix时间戳(英文为Unix epoch, Unix time, POSIXme 或 Unix timestamp),是指从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。

date 命令可以直接把当前时间转化为时间戳,方法:date "+%s" 。带上-d参数,还可以实现指定日期和秒点之间的转换。

date 命令亦可以获取当前时间的纳秒,方法:date "+%N"。

如此,我们就可以进行相应的计算,得到对于的微秒、毫秒和纳秒数。

#当前系统时间转换为时间戳

date "+%s"

#当前系统时间纳秒数

date "+%s"

#当前系统时间纳秒点

date "+%s%N"

#当前系统时间微秒点

expr $(date "+%s%N") / 1000

#当前系统时间毫秒点

expr $(date "+%s%N") / 1000000

时间加减运算

借助 -d 或是 --date 参数,。或是先将指定的时间转换为秒点,再用 expr 命令 对其计算。

date -d last-day "+%F %T"

date -d yesterday "+%F %T"

date -d next-month "+%F %T"

date -d next-year "+%F %T"

date -d "5 days ago" "+%F %T"

date -d week "+%F %T"

date -d "Nov 12 - 2 days" "+%F %T"

date -d "12/12 - 2 days" "+%F %T"

date -d "2 days" "+%F %T"

date -d "-1day" +%F

date -d "+2hour 2min 2sec" +%F\ %H:%M:%S

系统时区

常用的时区取值有:

UTC  (Universal Time Coordinated,UTC)世界协调时间

CST  (China Standard Time UTC+8:00)中国沿海时间(北京时间)

GMT  (Greenwich Mean Time)格林威治标准时间

所以相关计算时候,一定要特别注意,是否加上UTC时间秒点:8 * 60 * 60 = 28,800‬。

date默认输出时,使用的本地时间,即CST:Sun Feb 16 18:26:58 CST 2020。

如果需要查看当前时区时间,带上-R参数: date -R :Sun, 16 Feb 2020 18:27:12 +0800

系统时间与硬件时间

linux系统时钟有两个,一个是硬件时钟(Real Time Clock),叫RTC,即BIOS时间,就是我们进行CMOS设置时看到的时间。另一个是系统时钟(System clock),也叫内核时钟或者软件时钟,是linux系统Kernel时间。

当Linux启动时,系统Kernel会去读取硬件时钟的设置,然后系统时钟就会独立于硬件运作,是由软件根据时间中断来进行计数的,内核时钟在系统关机的情况下是不存在的。并且在系统关机的时,会将系统时间写回RTC中进行同步。

所以,为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS。

由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。如果要确保修改生效可以执行命令: clock –w。这个命令强制把系统时间写入CMOS。

#查看硬件时间

hwclock --show

clock --show

#设置硬件时间

hwclock --set --date="2020-02-17 18:30:00"

clock --set --date="2020-02-17 18:30:00"

#同步时间到shell

hwclock

#同步互联网时间

ntpdate time.windows.com

#硬件时钟与系统时钟同步(hc代表硬件时间,sys代表系统时间):

hwclock --hctosys

clock --hctosys

#系统时钟和硬件时钟同步:

hwclock --systohc

clock --systohc

time命令

常用于测量一个指令执行时所需消耗的时间及系统资源等资讯,例如 CPU 时间、记忆体、输入输出等等。

所以这里不再多讲。

注意1:本命令不是用来显示和修改系统时间的(这是date命令干的事情)。

注意2:部分资讯在 Linux 上会显示不出来。这是因为在 Linux 上部分资源的分配函式与 time 指令所预设的方式并不相同,以致于 time 指令无法取得这些资料。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值