date命令详解使用(六)

date命令:

        

       在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到时间的运算,熟练运用date命令将给自己的工作带来诸多方便。date命令是Linux系统里自带的一个系统命令,Linux中的date命令可以用来显示或设定系统的日期与时间,并且在很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作。在类UNIX系统中,日期被存储为一个整数,其大小为自世界标准时间(UTC)1970年1月1日0时0分0秒起流逝的秒数。

1 命令功能

       date命令用来显示当前系统时间或设定时间.

2、date命令有两种使用格式:

date [OPTION]... [+FORMAT]:<------用于显示时间

date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]: <------用于设置时间

2.1 选项-OPTION:

    -d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;

    -s<字符串>:根据字符串来设置日期与时间。字符串前必须加上双引号;

    -R:以RFC 5322格式输出日期和时间。例如:Mon, 14 Aug 2006 02:34:56 -0600

 

2.2、显示时间的格式-FORMAT

date [OPTION]... [+FORMAT]

date命令指定显示时间的格式[FORMAT]选项介绍如下:

%a :显示查看当日星期的英文缩写

%A :显示查看当日星期的英文全名

%b : 显示月份的英文缩写

%B:显示月份的全名

%c :显示区域设置的日期和时间

%C: 显示世纪;类似于%Y,会省略最后两位数字(例如,%Y显示为年份2022,那么%C显示会省略后两位,%C只显示20)。

%d:显示当天的日期

%D:显示月日年,格式: 月/日/年

%e : 显示当天的日期

%F :显示全日期年月日,格式为:年-月-日

%g:显示年份的后两位数字

%G year of ISO week number (see %V); normally useful only with %V

%h same as %b 显示月份的英文缩写

%H hour (00..23) 显示当前时间小时

%I hour (01..12)

%j day of year (001..366)

%k hour, space padded ( 0..23); same as %_H

%l hour, space padded ( 1..12); same as %_I

%m month (01..12) 显示月份以数字显示

%M minute (00..59) 以数字显示分钟数

%n a newline 换行

%N nanoseconds (000000000..999999999) 显示纳秒

%p locale's equivalent of either AM or PM; blank if not known 显示上午(AM)或下午(PM)

%P like %p, but lower case 和%p一样,但显示的是小写字母

%r locale's 12-hour clock time (e.g., 11:11:04 PM) 显示时间,格式为:11:11:04 PM

%R 24-hour hour and minute; same as %H:%M 显示时间的小时和分钟

%s seconds since 1970-01-01 00:00:00 UTC 从1970一月一日零点零分零秒到此刻所经过的秒数

%S second (00..60) 显示秒钟

%t a tab

%T time; same as %H:%M:%S 显示时间为小时:分钟:秒

%u day of week (1..7); 1 is Monday 显示星期几,以数字显示,如显示为1 ,就是星期一

%U week number of year, with Sunday as first day of week (00..53)

%V ISO week number, with Monday as first day of week (01..53)

%w day of week (0..6); 0 is Sunday 显示每周的第几天,星期一为1,星期日显示为0

%W week number of year, with Monday as first day of week (00..53)

%x locale's date representation (e.g., 12/31/99) 显示格式为:12/31/99

%X locale's time representation (e.g., 23:13:48) 显示格式为:12:00:52 AM

%y last two digits of year (00..99) 显示年份后两位

%Y year 显示完整年份

%z +hhmm numeric time zone (e.g., -0400) 显示数字时区

%:z +hh:mm numeric time zone (e.g., -04:00)

%::z +hh:mm:ss numeric time zone (e.g., -04:00:00)

%:::z numeric time zone with : to necessary precision (e.g., -04, +05:30)

%Z alphabetic time zone abbreviation (e.g., EDT)

 3 dateFORMAT使用实例:

root@ubuntn:~# date +%A

Saturday            //以英文显示星期几

root@ubuntn:~# date +%d

17              //显示当天的日期

root@ubuntn:~# date +%h

Mar           //以英文显示月份缩写 和使用%b一样

root@ubuntn:~# date +%H

10           //显示时间点数 10为10点

root@ubuntn:~# date +%m

03            //以数字显示月份

root@ubuntn:~# date +%M

21            //以数字显示分钟数

root@ubuntn:~# date +%S

30            //显示秒钟

root@ubuntn:~# date +%Y

2018       //显示年份

root@ubuntn:~# date +%F

2018-03-17        //显示日期全格式

root@ubuntn:~# date +%Y-%m-%d

2018-03-17       //显示日期全格式

root@ubuntn:~# date +%Y-%m-%d-%H:%M

2018-03-17-10:41 

root@ubuntn:~# date +%Y-%m-%d-%H:%M:%S              

2018-03-17-10:41:49         //显示日期和全部时间,%T和%H:%M:%S 显示时间一样,都为为小时:分钟:秒

root@ubuntn:~# date +%F_%T

2018-03-17_10:47:53

root@ubuntn:~#

 

 4 date命令其他使用如下方式:

root@ubuntn:~# date +"This year is %Y"

This year is 2018

root@ubuntn:~# date +"This year is %Y.Today is %d"

This year is 2018.Today is 17

root@ubuntn:~# date +"This year is %Y.%nToday is %d"

This year is 2018.

Today is 17

获取指定时间从1970年1月1日到指定时间经过的秒数,如获取2017年10月20日,就是获取从1970年1月1日到2017年10月20日经过的秒数,如下:

root@ubuntn:~# date -d"2017-10-20" +%s

1508428800

root@ubuntn:~#

5 查看系统时间时区

root@ubuntn:~# date -R

Fri, 14 Jul 2023 07:40:51 +0000

root@ubuntn:~#

 

 

备注:+0000:表示0时区,而中国所在的时区是东八区,Ubuntu服务器版在安装的时候没有选择时区的配置。

这样使用date命令修改时间的时候,修改后的时候还是零时区的时间,而不是中国的东八区的时间,需要修改时区后再修改时间,

这样修改后的时间才是中国的东八区的时间。

5.1 修改时区

我们将时区设置为Asia/Shanghai

1)、查看所有可用时区:timedatectl list-timezones

使用timedatectl list-timezones命令会显示很多时区,我们可以过滤至查看要使用的时区,如下:

root@ubuntn:~# timedatectl list-timezones | grep -i 'shang'

Asia/Shanghai

root@ubuntn:~#

(2)、将时区设置为Asia/Shanghai,修改方法:

root@ubuntn:~# timedatectl set-timezone Asia/Shanghai

3)、查看时间和时区:

root@ubuntn:~# timedatectl status

               Local time: Sat 2023-07-15 18:49:32 CST

           Universal time: Sat 2023-07-15 10:49:32 UTC

                 RTC time: Sat 2023-07-15 10:49:32

                Time zone: Asia/Shanghai (CST, +0800)

System clock synchronized: yes

              NTP service: active

          RTC in local TZ: no

root@ubuntn:~#

+0800就表示时区是东八区

6 设置系统时间

在Linux中有两个时钟:系统时钟和硬件时钟

硬件时钟:记录在服务器主板的CMOS芯片里面

系统时钟:也叫做操作系统时间、kernel clock或者software clock,是基于时间中断器的软件计数器.

系统时钟和硬件时钟在一定的场景下会互相影响,比如:

  • 服务器开机时,系统时钟会读取硬件时钟;
  • 操作系统使用过程或者正常关机时,也有可能将系统时钟写入到硬件时钟,缩小硬件时钟与系统时钟的差距

hwclock:显示硬件时钟,同时还可以实现从系统时钟到硬件时钟,或者从系硬件时钟到统时钟的同步

    -s,--hctosys: 把硬件时钟写入系统

   -w,--systohc:把系统时间写到硬件

6.1 使用示例:

(1)、查看系统时间

root@ubuntn:~# date

Sat Jul 15 10:07:05 PM CST 2023

(2)、查看硬件时间

root@ubuntn:~# hwclock

2023-07-15 22:07:22.996732+08:00

root@ubuntn:~#

6.2date命令用于设置系统时间的格式:

 date [MMDDhhmm[[CC]YY][.ss]]

参数说明:

    MM:月份

   DD:日期

   hh:小时

   mm:分钟

  YY:两位年份

  CCYY:四位年份

1)、示例:

root@ubuntn:~# date 071521582023.00

Sat Jul 15 09:58:00 PM CST 2023

root@ubuntn:~#

扩展:如果发现和实际时间相差过多,于是手动修改,但可能无法修改为其他时间,因为系统可能已经开启时间自动同步.

如果使用timedatectl set-time “YYYY-MM-DD HH:MM:SS”来设置日期时间会提示“Failed to set time: Automatic time synchronization is enabled”,而使用date命令修改则没有提示。

root@ubuntn:~# timedatectl set-time "2023-07-15 22:25:00"

Failed to set time: Automatic time synchronization is enabled

root@ubuntn:~#

这时需要时间需要关闭时间自动同步,先执行 timedatectl set-ntp no 关闭时间自动同步。

root@ubuntn:~# timedatectl set-ntp no

(2)、修改时间后防止重启失效,把系统时间写到硬件

root@ubuntn:~#  hwclock --systohc

1.6.3 使用-s参数设置系统时间

root@ubuntn:~# date -s "2023-07-15 23:10:20" 

7 修改成24小时制

把时间格式调整为24小时制,编辑文件/etc/default/locale,增加一行“LC_TIME=en_DK.UTF-8”内容即可,如下:

root@ubuntn:~# echo "LC_TIME=en_DK.UTF-8" >> /etc/default/locale

修改后重启系统,配置生效,在使用date命令查看时间时就会显示24小时格式的时间。如下:

root@ubuntn:~# date

Sat Jul 15 23:15:18 CST 2023

root@ubuntn:~#

 

8 date命令扩展 - 显示未来时间和历史时间

1)、显示历史时间

显示10秒前的时间:

root@ubuntn:~# date +%F_%T_%N

2023-07-15_10:26:27_189760018

root@ubuntn:~# date +%F_%T_%N -d "-10second"         //显示10秒前的时间

2023-07-15_10:26:17_979222973

root@ubuntn:~#

 

显示2分钟前的时间:

root@ubuntn:~# date +%F_%T_%N

2023-07-15_10:19:43_208687673     //当前时间,精确到纳秒

root@ubuntn:~# date +%F_%T_%N -d "-2minute"

2023-07-15_10:17:43_892144373     //显示两分钟前的时间

root@ubuntn:~#

显示当前年月日

root@ubuntn:~# date +%F

2023-07-15

root@ubuntn:~#

显示当前后一天的日期

root@ubuntn:~# date +%F -d "+1day"

2023-07-16

root@ubuntn:~#

显示下一月的日期

root@ubuntn:~# date +%F -d "+1month"

2023-08-15

root@ubuntn:~#

显示下一年的日期

root@ubuntn:~# date +%F -d "+1year"

2024-07-15

root@ubuntn:~#

3)、显示未来时间

显示前一天的日期

root@ubuntn:~# date +%F -d "-1day"

2023-07-14

root@ubuntn:~#

显示上一月的日期

root@ubuntn:~# date +%F -d "-1month"

2023-06-15

root@ubuntn:~#

显示前一年的日期

root@ubuntn:~# date +%F -d "-1year"

2022-07-15

root@ubuntn:~#

猜你喜欢

转载自blog.csdn.net/yjun89/article/details/131748468