注: 部分概念介绍来源于网络
date:
使用方式 : date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
说明 : date 能用来显示或设定系统的日期和时间,在显示方面,使用者能设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下 :
-d datestr : 显示 datestr 中所设定的时间 (非系统时间)
--help : 显示辅助讯息
-s datestr : 将系统时间设为 datestr 中所设定的时间
-u : 显示目前的格林威治时间
--version : 显示版本编号
时间日期方面 :
% 印出
% %n 下一行
%% 输出%符号
%a 当前域的星期缩写 (Sun..Sat)
%A 当前域的星期全写 (Sunday..Saturday)
%b 当前域的月份缩写(Jan..Dec)
%B 当前域的月份全称 (January..December)
%c 当前域的默认时间格式 (Sat Nov 04 12:02:33 EST 1989)
%C n百年 [00-99]
%d 两位的天 (01..31)
%D 短时间格式 (mm/dd/yy)
%e 短格式天 ( 1..31)
%F 文件时间格式 same as %Y-%m-%d
%h same as %b
%H 24小时制的小时 (00..23)
%I 12小时制的小时 (01..12)
%j 一年中的第几天 (001..366)
%k 短格式24小时制的小时 ( 0..23)
%l 短格式12小时制的小时 ( 1..12)
%m 双位月份 (01..12)
%M 双位分钟 (00..59)
%n 换行
%N 十亿分之一秒(000000000..999999999)
%p 大写的当前域的上下午指示 (blank in many locales)
%P 小写的当前域的上下午指示 (blank in many locales)
%r 12小时制的时间表示(时:分:秒,双位) time, 12-hour (hh:mm:ss [AP]M)
%R 24小时制的时间表示 (时:分,双位)time, 24-hour (hh:mm)
%s 自基础时间 1970-01-01 00:00:00 到当前时刻的秒数(a GNU extension)
%S 双位秒 second (00..60);
%t 横向制表位(tab)
%T 24小时制时间表示(hh:mm:ss)
%u 数字表示的星期(从星期一开始 1-7)
%U 一年中的第几周星期天为开始 (00..53)
%V 一年中的第几周星期一为开始 (01..53)
%w 一周中的第几天 星期天为开始 (0..6)
%W 一年中的第几周星期一为开始 (00..53)
%x 本地日期格式 (mm/dd/yy)
%X 本地时间格式 (%H:%M:%S)
%y 两位的年(00..99)
%Y 年 (1970…)
%Z 显示时区
若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],
MM 为月份,
DD 为日,
hh 为小时,
mm 为分钟,
CC 为年份前两位数字,
YY 为年份后两位数字,
ss 为秒数
例子 :
显示时间后跳行,再显示目前日期 : date +%T%n%D
显示月份和日数 : date +%B %d
显示日期和设定时间(12:34:56) : date --date 12:34:56
设置系统当前时间(12:34:56):date --s 12:34:56
注意 : 当你不希望出现无意义的 0 时(比如说 1999/03/07),则能在标记中插入 - 符号,比如说 date +%-H:%-M:%-S 会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4。另外,只有取得权限者(比如说 root)才能设定系统时间。 当你以 root 身分更改了系统时间之后,请记得以 clock -w 来将系统时间写入 CMOS 中,这样下次重新开机时系统时间才会持续抱持最新的正确值。
ntp时间同步
linux系统下默认安装了ntp服务,手动进行ntp同步如下
ntpdate ntp1.nl.net
当然,也能指定其他的ntp服务器
#获得当天的日期
date=$(date +%Y%m%d)
输出:2011-01-26
#前两天的日期
date1=$(date +%Y%m%d --date ’2 days ago’)
#有时候我们需要使用今天之前或者往后的日期,这时可以使用date的 -d参数
#获取明天的日期
date -d next-day +%Y%m%d 或者:date -d tomorrow +%Y%m%d
#获取昨天的日期
date -d last-day +%Y%m%d 或者:date -d yesterday +%Y%m%d
#获取下周一的日期
date -d ’next monday’
#获取上个月的年和月
date -d last-month +%Y%m
#获取下个月的年和月
date -d next-month +%Y%m
#获取明年的年份
date -d next-year +%Y
#获取该日期是星期几
date -d "nov 22"
输出:Tue Nov 22 00:00:00 CST 2022
#shell中日期加减指定间隔单位
#增加36小时:
a=`date +%Y-%m-%d`
b=`date +%Y-%m-%d -d "$a +36 hours"`
#10天前:
date -d "$a -10 days"
#以指定格式显示文件更改后最后日期,如yyyy-mm-dd hh24:mi:ss
date "+%Y-%m-%d %H:%M:%S" -r test.bak
输出:2022-01-26 11:18:15
#获取上周日期(day,month,year,hour)
date -d "-1 week" +%Y%m%d
在shell脚本中难免要通过年月日来进行条件判断一般是通过将其转为时间戳来进行比较
#系统日期天转换成时间戳
date -d `date +%Y%m%d` +%s
输出:1335024000
#给定时间转换成时间戳
date -d "2012-04-21 00:00:00" +%s
输出:1334937600
#时间戳转换正常时间
date -d @1334937600 "+%Y%m%d %H%M%S"
n second(s)/minute(s)/hour(s)/day(s)/year(s) ago 即可,其中n支持负数
date +%Y%m%d -d " 2012/07/06 -2 day"
表示以“%Y%m%d”格式,获得2天前日期(以当前时间计算)
注意:" 2012/07/06 -2 day" 中的日期格式可写成“2012-07-06”,就不可写成“20120706”,返回结果由+%Y%m%d控制
#减少一分钟
date "+%Y%m%d %H%M%S" -d "2022/02/01 00:00:00 1 minutes ago"