Linux中date 以及date -d命令的详解
·
1. 显示时间
date命令可以按照指定格式显示日期,只输入date则以默认格式显示当前时间。如下:
[root@server1 files]# date
Wed Oct 28 17:20:00 CST 2020
2. 指定格式显示时间
- 若要指定格式显示日期,可以使用“+”开头的字符串指定其格式,详细格式如下:
| 指令 | 作用 |
|---|---|
| %n | 下一行 |
| %t | 跳格 |
| %H | 小时(00-23) |
| %I | 小时(01-12) |
| %k | 小时(0-23) |
| %l | 小时(1-12) |
| %M | 分钟(00-59) |
| %p | 显示本地 AM 或 PM |
| %r | 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M) |
| %s | 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 |
| %S | 秒(00-60) |
| %T | 直接显示时间 (24 小时制) |
| %X | 相当于 %H:%M:%S |
| %Z | 显示时区 |
| %a | 星期几 (Sun-Sat) |
| %A | 星期几 (Sunday-Saturday) |
| %b | 月份 (Jan-Dec) |
| %B | 月份 (January-December) |
| %c | 直接显示日期与时间 |
| %d | 日 (01-31) |
| %D | 直接显示日期 (mm/dd/yy) |
| %h | 同 %b |
| %j | 一年中的第几天 (001-366) |
| %m | 月份 (01-12) |
| %U | 一年中的第几周 (00-53) |
| %w | 一周中的第几天 (0-6) |
| %W | 一年中的第几周 (00-53) |
| %x | 直接显示日期 (mm/dd/yy) |
| %y | 年份的最后两位数字 (00.99) |
| %Y | 完整年份 (0000-9999) |
- 上述格式只需要掌握几个常用的即可。
- 例如%Y表示年,%m表示月,%d表示日,%H表示小时,%M表示分钟,%S表示秒,%s表示从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数,相当于time函数,%w表示一周中的第几天。实例见下:
date " now i: %Y-%m-%d %H:%M:%S"
[root@server1 files]# date "+now is %Y-%m-%d %H:%M:%S"
now is 2020-10-28 17:30:02
[root@server1 files]# date "+现在时间是: %Y-%m-%d %H:%M:%S"
现在时间是: 2020-10-28 17:31:10
3. 显示经过运算后的时间
- 如果要显示的时间不是当前时间,而是经过运算的时间,则可以用-d选项。例如显示三年前的时间:
- 举例
[root@server1 files]# date "+%Y-%m-%d %H:%M:%S"
2020-10-28 17:37:45
[root@server1 files]# date "+%Y-%m-%d %H:%M:%S" -d "-3 year"
2017-10-28 17:38:05
[root@server1 files]# date "+%Y-%m-%d %H:%M:%S" -d "-3 day"
2020-10-25 17:38:15
[root@server1 files]# date "+%Y-%m-%d %H:%M:%S" -d "-28 day"
2020-09-30 17:38:23
[root@server1 files]# date "+%Y-%m-%d %H:%M:%S" -d "-2 month"
2020-08-28 17:38:41
[root@server1 files]# date -d "-2 year -10 day" "+%Y-%m-%d"
2018-10-18
[root@server1 files]# date -d "-2 year -1 month -10 day" "+%Y-%m-%d"
2018-09-18
date -d 的使用
- date 命令的另一个扩展是 -d 选项,使用这个功能强大的选项,通过将日期作为引号括起来的参数提供,您可以快速地查明一个特定的日期。-d 选项还可以告诉您,相对于当前日期若干天的究竟是哪一天,从现在开始的若干天或若干星期以后,或者以前(过去)。通过将这个相对偏移使用引号括起来,作为 -d 选项的参数,就可以完成这项任务。
具体说明如下:
- 除了上面经过运算显示时间之外,还可以用date -d 直接指定
date -d '3 days ago'//显示2天前的时间,
2019年 02月 10日 星期日 08:53:28 CSTdate -d "3 days ago" "+%Y%m%d"//显示2天前的时间,20190210
date -d '60 second ago' //显示60秒前的时间
date -d '3 months 1 day' //显示3月1天后的时间
date -d '25 Dec' +%j //显示12月25日在当年的哪一天
[root@server1 files]# date -d "25 Dec" "+%j"
360
[root@server1 files]# date -d "25 Jun" "+%j"
177
date -d '2019-02-12 09:00:00 +0000' +%s //自UTC时间 1970-01-01 00:00:00 迄今的秒数
[root@server1 files]# date -d '2020-02-11' "+%s"
1581350400
[root@server1 files]# date -d '2020-02-11 02:10:10' "+%s"
1581358210
[root@server1 files]# date -d '2020-02-11 02:10:10 +1111' "+%s"
1581346750
4.设置时间
- 用 -s选项可以设置系统时间:(只能root用户设置)
date -s 20201028设置20201028,把具体时间会设置成00:00:00date -s 01:01:01设置具体时间 ,不改变日期date -s "10:10:10 2020-10-28"会设置全部时间
[root@server1 files]# date -s "2020-08-09 10:10:10"
Sun Aug 9 10:10:10 CST 2020
[root@server1 files]# date -s "20200809 10:10:10"
Sun Aug 9 10:10:10 CST 2020
[root@server1 files]# date -s "2020/08/09 10:10:10"
Sun Aug 9 10:10:10 CST 2020
5.小案例(循环日期)
- 编写脚本,循环打印日期(可指定起始日期或默认日期),并返回天数。
##判断变量是否为空,若为空则赋给它值
#/bin/bash
if [ "$1" == "" ]
then
start_date=`date -d "today last month" "+%Y%m01"`
end_date=`date -d "today" "+%Y%m%d"`
elif [ "$2" == "" ]
then
start_date=`date -d "$1" "+%Y%m%d"`
end_date=`date -d "today" "+%Y%m%d"`
else
start_date=`date -d "$1" "+%Y%m%d"`
end_date=`date -d "$2" "+%Y%m%d"`
fi
##判断变量准确性,起始日期是否小于截至日期
if [ ${start_date} -gt ${end_date} ]
then
echo "Error\nPLease input right date!!"
exit
fi
##通过循环,返回日期值
for i in `seq 0 10000`
do
t_date=`date -d "${start_date} +$(($i+1)) day" "+%Y%m%d"`
echo $t_date
cnt_day=$i
##如果循环到当天,就退出
if [ ${t_date} == ${end_date} ]
then
break
fi
done
echo "The days between two dates is ${cnt_day}"
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)