- 显示时间
date命令可以按照指定格式显示日期,只输入date则以默认格式显示当前时间。如下:
[root@server1 files]# date
Wed Oct 28 17:20:00 CST 2020
1
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)v |
| %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
- 显示经过运算后的时间
如果要显示的时间不是当前时间,而是经过运算的时间,则可以用-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 rver1 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 CST
date -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:00
date -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}"文档更新时间: 2023-08-11 07:34 作者:月影鹏鹏