文章目录

  • 1、linux中date函数格式
  • 2、date日期函数的具体用法
    • 2.1、获取相应格式的日期
    • 2.2、获取相隔时间段的日期
      • 2.2.1、获取今天的日期
      • 2.2.2、获取昨天的日期
      • 2.2.3、获取明天的日期
    • 2.3、获取当前时间戳
    • 2.4、将指定时间字符串转成日期格式
    • 2.5、获取指定日期前1天的日期
    • 2.6、获取指定日期后1天的日期
    • 2.7、获取指定日期上1个月的第一天
    • 2.8、获取指定日期上1个月的最后一天

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

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

  1. Linux中fork函数的作用及用法

    https://blog.csdn.net/weixin_40853073/article/details/81873398

  2. Linux服务端开发——Linux中stat函数和stat命令使用详解

    这篇文章主要介绍了Linux中stat函数和stat命令使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 stat函数和s ...

  3. linux '$^t' 时间,Linux C时间函数 time_t struct tm

    Linux C时间函数 time_t struct tm #include 关于时间的类型: time_t long型,表示从1970年1月1日到现在经过的秒数. struct tm { int tm ...

  4. linux 纪元时间转换,[转]Linux下时间函数time gettimeofday

    Linux下时间函数time & gettimeofday UNIX及Linux的时间系统是由「新纪元时间」Epoch开始计算起,单位为秒.Epoch是指定为1970年1月1日凌晨零点零分零秒 ...

  5. Linux中popen函数的作用小结

    概述 popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程.这篇文章重点给大家介绍Linux中popen函数的作用,感兴趣的朋友一起看看吧 p ...

  6. mysql时间函数now()_MySQL中时间函数NOW()和SYSDATE()的区别

    mysql中日期函数还是比较常用的.主要有NOW()和SYSDATE()两种,虽然都表示当前时间,但使用上有一点点区别. NOW()取的是语句开始执行的时间,SYSDATE()取的是动态的实时时间. ...

  7. Linux中fork()函数详解

    Linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...

  8. 嵌入式linux通过程序设置系统时间,嵌入式新手如何设定Linux的时间函数

    一.时间相关说明 格林威治时间表示0时区的标准时间.其他时区的时间和此标准时间均有时间差.UTC(UniversalTime Coordinated)是世界协调时间,是格林威治时间在互联网中的表示方法 ...

  9. linux中probe函数传递参数的寻找(下)

    点击打开链接 linux中probe函数传递参数的寻找(下) 通过追寻driver的脚步,我们有了努力的方向:只有找到spi_bus_type的填充device即可,下面该从device去打通,当两个 ...

最新文章

  1. Centos 内存占满 释放内存
  2. 惠普鼠标g260_惠普g260鼠标怎么样 惠普鼠标怎么样?
  3. 2018全球科技创新报告
  4. halcon知识:ncc_model模板匹配
  5. H2Database 转义符
  6. Source Insight编辑器配置
  7. 深入学习jQuery的三种常见动画效果
  8. 10.4 使用instanceof操作符判断对象类型
  9. Written English-书面-一般将来时
  10. windows内核驱动漏洞挖掘工具 - IOCTL Fuzzer
  11. JavaScript实现图片上传并预览并提交
  12. 使用hMailServer邮箱服务器收发邮件
  13. ssm mysql项目实战_SSM 项目实战
  14. 【编程学习】每天进步一点点,编程学习之路:一款单词转MP3制作软件,单词随身听制作工具v1.0.1
  15. c语言结构体函数传递方式,c-将struct传递给函数
  16. 不用邀请照样申请Gmail免费邮箱
  17. 显存(Video Memory)
  18. 我国制造业供应链管理存在哪些问题?
  19. 哈哈...汗汗...
  20. Mount is denied because the NTFS volume is already exclusively opened. The volume may be already mou

热门文章

  1. 2015年我国互联网行业概况及现状分析
  2. hyundai-wia
  3. abap BDC 使用方法
  4. ABAP实现本地化的资产负债表和损益表
  5. 大健康产业里的巨头身影:格局已定但业务创新才刚刚开始
  6. 回顾国产手机4年沉浮,仍然只是靠这三招翻身
  7. hibernate连接mysql密码错误,hibernate+mysql too many connections错误
  8. linux ping结果中mdev,Linux下PING中mdev含义
  9. 程序员合同日期不到想辞职_程序员被迫辞职,临走把新员工办公桌擦遍,老板:交5万罚款...
  10. php获得指定位置中间的数据库,PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结...