每天学一点儿shell:linux中时间函数的date的用法

导读:本篇文章讲解 每天学一点儿shell:linux中时间函数的date的用法,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1、linux中date函数格式

首先date函数的使用格式如下:

用法:date [选项]... [+格式]
 或:date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

其中的格式解释所示:

符号 解释
%% 一个文字的 %
%a 当前locale 的星期名缩写(例如: 日,代表星期日)
%A 当前locale 的星期名全称 (如:星期日)
%b 当前locale 的月名缩写 (如:一,代表一月)
%B 当前locale 的月名全称 (如:一月)
%c 当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25)
%C 世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20)
%d 按月计的日期(例如:01)
%D 按月计的日期;等于%m/%d/%y
%e 按月计的日期,添加空格,等于%_d
%F 完整日期格式,等价于 %Y-%m-%d
%g ISO-8601 格式年份的最后两位 (参见%G)
%G ISO-8601 格式年份 (参见%V),一般只和 %V 结合使用
%h 等于%b
%H 小时(00-23)
%I 小时(00-12)
%j 按年计的日期(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 换行
%N 纳秒(000000000-999999999)
%p 当前locale 下的”上午”或者”下午”,未知时输出为空
%P 与%p 类似,但是输出小写字母
%r 当前locale 下的 12 小时时钟时间 (如:11:11:04 下午)
%R 24 小时时间的时和分,等价于 %H:%M
%s 自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数
%S 秒(00-60)
%t 输出制表符 Tab
%T 时间,等于%H:%M:%S
%u 星期,1 代表星期一
%U 一年中的第几周,以周日为每星期第一天(00-53)
%V ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53)
%w 一星期中的第几日(0-6),0 代表周一
%W 一年中的第几周,以周一为每星期第一天(00-53)
%x 当前locale 下的日期描述 (如:12/31/99)
%X 当前locale 下的时间描述 (如:23:13:48)
%y 年份最后两位数位 (00-99)
%Y 年份
%Z 按字母表排序的时区缩写 (例如,EDT)

2、date日期函数的具体用法

2.1、获取相应格式的日期

输出日期格式为yyyy-MM-dd HH:mm:ss的时间,以当前日期时间为例:

方式一:

[root@hadoop-master ~]# date -d today +"%Y-%m-%d %T"
2020-09-16 19:45:39

方式二:

[root@hadoop-master ~]# date +"%Y-%m-%d %T"
2020-09-16 19:48:39

方式三:

[root@hadoop-master ~]# date +"%Y-%m-%d %H:%M:%S"
2020-09-16 19:51:42

举个其他数据格式的例子,例如输出格式为yyyMMddHHmmss格式

[root@hadoop-master ~]# date +"%Y%m%d%H%M%S"
20200916195408

2.2、获取相隔时间段的日期

2.2.1、获取今天的日期

方式一:

[root@hadoop-master ~]# date +%Y%m%d
20200916

方式二:

[root@hadoop-master ~]# date +%F
2020-09-16

方式三:

[root@hadoop-master ~]# echo $(date +%Y%m%d)
20200916

2.2.2、获取昨天的日期

方式一:

[root@hadoop-master ~]# date -d yesterday +%Y%m%d
20200915

方式二:

[root@hadoop-master ~]# date -d -1day +%Y%m%d
20200915

方式三:

[root@hadoop-master ~]# date -d "-1 day" +%Y%m%d
20200915

方式四:

[root@hadoop-master ~]# date +%Y%m%d --date="-1 day"
20200915

方式五:

[root@hadoop-master ~]# date +%Y%m%d --date="1 day ago"
20200915

根据以上的表达式我们推测出17天前的日期为:

[root@hadoop-master ~]# date +%Y%m%d --date=-17day
20200830

同理也可以推理出上一个小时为:

[root@hadoop-master ~]# date +"%Y-%m-%d %H:%M:%S"  --date=-1hour
2020-09-16 19:15:00

上一分钟为:

[root@hadoop-master ~]# date +"%Y-%m-%d %H:%M:%S"  --date=-1minute
2020-09-16 20:14:34

同理获取上一年,上一月,上一天,上一小时,上一分钟,上一秒,不多扩展了。

2.2.3、获取明天的日期

根据上面的我们很容易推测出明天的日期计算方式:
方式一:

[root@hadoop-master ~]# date +%Y%m%d --date=tomorrow
20200917

方式二:

[root@hadoop-master ~]# date +%Y%m%d --date=+1day
20200917

方式三:

[root@hadoop-master ~]# date +%Y%m%d --date="+1 day"
20200917

同理可以推测出17天后是:

[root@hadoop-master ~]# date +%Y%m%d --date="+17 day"
20201003

2.3、获取当前时间戳

注意一下的是自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数,如果是使用更精确的时间戳则不能使用这个

[root@hadoop-master ~]# date +%s
1600258838

下面是获取当前时间的纳秒数,精确到亿分之一秒,这个是秒后面的值

[root@hadoop-master ~]# date +%N
713781544

获取当前时间的毫秒数

[root@hadoop-master ~]# echo $((`date '+%s'`*1000+`date '+%N'`/1000000))
1600259292777

不过这个有个缺陷会报错:

[root@hadoop-master ~]# echo $((`date '+%s'`*1000+`date '+%N'`/1000000))
-bash: 1600259263*1000+097437620: 数值太大不可为算数进制的基 (错误符号是 "097437620"

2.4、将指定时间字符串转成日期格式

把字符串转成时间戳

[root@hadoop-master ~]# date +%s --date="2020-09-16"
1600185600

把时间戳转成时间

[root@hadoop-master ~]# date -d @1600185600  "+%Y-%m-%d"
2020-09-16

2.5、获取指定日期前1天的日期

方式一:

[root@hadoop-master ~]# date -d "20210221 1 day ago" +%Y-%m-%d
2021-02-20

方式二:

[root@hadoop-master ~]# date -d "20210221 -1 day" +%Y-%m-%d
2021-02-20

方式三:

[root@hadoop-master ~]# date -d "20210221 -1day" +%Y-%m-%d
2021-02-20

方式四:

[root@hadoop-master ~]# date -d "20210221 yesterday" +%Y-%m-%d
2021-02-20

方式五:

[root@hadoop-master ~]# date -d "20210221" --date="-1 day" +%Y-%m-%d
2021-02-20

方式六:

[root@hadoop-master ~]# date -d "20210221 last day" +%Y-%m-%d
2021-02-20

根据上面可以类推指定日期前3天的日期为

[root@hadoop-master ~]# date -d "20210221 3 day ago" +%Y-%m-%d
2021-02-18

2.6、获取指定日期后1天的日期

方式一:

[root@hadoop-master ~]# date -d "20210221 +1 day" +%Y-%m-%d
2021-02-22

方式二:

[root@hadoop-master ~]# date -d "20210221 1 day" +%Y-%m-%d
2021-02-22

方式三:

[root@hadoop-master ~]# date -d "20210221 1day" +%Y-%m-%d
2021-02-22

方式四:

[root@hadoop-master ~]# date -d "20210221" --date="+1 day" +%Y-%m-%d
2021-02-22

根据上面可以类推指定日期后3天的日期为

[root@hadoop-master ~]# date -d "20210221 +3 day" +%Y-%m-%d
2021-02-24

2.7、获取指定日期上1个月的第一天

注意每一个月的天数可能不一样,取当前日期月份1号来获取上一个月的月份。
示例:获取20210221的上一个月的月份
方式一:

[root@hadoop-master ~]#  date -d "`date -d "20210221" +%Y%m01` -1 month" +%Y-%m-01
2021-01-01

方式二:

[root@hadoop-master ~]# date -d "`date -d "20210221" +%Y%m01` last month" +%Y-%m-01
2021-01-01

2.8、获取指定日期上1个月的最后一天

方式一:

[root@hadoop-master ~]# date -d "`date -d "20210221" +%Y%m01` -1 day" +%Y-%m-%d
2021-01-31

方式二:

[root@hadoop-master ~]# date -d "`date -d "20210221" +%Y%m01` -1day" +%Y-%m-%d
2021-01-31

方式三:

[root@hadoop-master ~]# date -d "`date -d "20210221" +%Y%m01` yesterday" +%Y-%m-%d
2021-01-31

方式四:

[root@hadoop-master ~]# date -d "`date -d "20210221" +%Y%m01` 1 day ago" +%Y-%m-%d
2021-01-31

方式五:

[root@hadoop-master ~]# date -d "`date -d "20210221" +%Y%m01` last day" +%Y-%m-%d
2021-01-31

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/72659.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!