文章目录
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