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 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}"