最近脚本需要获取Linux前一天时间格式,用于设置日志文件名,网上查了查资料,这里记录一下。
1.date命令
1.1 date命令使用格式
date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
说明 : date 能用来显示或设定系统的日期和时间,在显示方面,使用者能设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下 :
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..61)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区
1.3 日期方面 :
%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) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)
若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],
其中 MM 为月份,
DD 为日,
hh 为小时,
mm 为分钟,
CC 为年份前两位数字,
YY 为年份后两位数字,
ss 为秒数
1.4 其他
-d datestr : 显示 datestr 中所设定的时间 (非系统时间)
--help : 显示辅助讯息
-s datestr : 将系统时间设为 datestr 中所设定的时间
-u : 显示目前的格林威治时间
--version : 显示版本编号
1.2 例如
使用date -d 选项:
date +"%Y%m%d" -d "+n days" 今天的后n天日期
显示当前日期是
DATE=`date +%Y%m%d` +号后面是定义格式为年月日
显示前一天为
DATE1=`date -d '1 days ago' +%Y%m%d` 加-d参数可以设置与当前日期的计算时间,同样,前2天为'2 days ago',去掉ago则为当前日期之后多少天
2.Linux下
前一天的日期
date -d "1 day ago" +"%y%m%d"
前一个月的日期
date -d "1 month ago" +"%y%m%d"
类似的还有
date -d "-1 day ago 1 month ago" +"%y%m%d"
date -d "1 day ago -1 year ago 1 month ago" +"%y%m%d"
下面是SHELL的例子:
DAYDEL=`date -d "1 month ago" +%m%d` //一个月前的日期
echo $DAYDEL
在Linux中可以通过date命令获取昨天、明天、上个月、下个月、上一年和下一年
- # 获取昨天
- date -d 'yesterday' # 或 date -d 'last day'
-
- # 获取明天
- date -d 'tomorrow' # 或 date -d 'next day'
-
- # 获取上个月
- date -d 'last month'
-
- # 获取下个月
- date -d 'next month'
-
- # 获取上一年
- date -d ’last year'
- # 获取下一年
- date -d 'next year'
此外你可以获取多天前,多天后,多个月前,多个月后,多年前或多年后
- # 三年前
- date -d '3 year ago'
-
- # 五年后
- date -d '-5 year ago'
-
- # 两天后
- date -d '-2 day ago'
-
- # 一个月前
- date -d '1 month ago'
3. MAC下
获取前一天的日期
date -v -1d +%Y-%m-%d
获取后一天的日期
date -v +1d +%Y-%m-%d
4.根据OS平台获取前一天的日期
- #!/bin/bash
-
- pre_date=0
- os_name=$(uname -s)
-
- if [[ "$os_name" == "Linux" ]]; then
- #statements
- pre_date=$(date +%Y-%m-%d --date='-1 day')
- elif [[ "$os_name" == "Darwin" ]]; then
- pre_date=$(date -v -1d +%Y-%m-%d)
- fi
参考
https://my.oschina.net/aiguozhe/blog/57835
https://www.jianshu.com/p/f750879120e4
https://blog.51cto.com/jerrybear/393097