2014年2月10日星期一

发现shell 中date 的一个bug

[root@APP ~]# date +%Y-%m-%d   
2013-11-01
[root@APP ~]# date -d "-1 month" "+%m "
10
[root@APP ~]# date -s 2013-12-01       
Sun Dec  1 00:00:00 CST 2013
[root@APP ~]# date -d "-1 month" "+%m "
11
[root@APP ~]# date -s 2013-12-31      
Tue Dec 31 00:00:00 CST 2013
[root@APP ~]# date -d "-1 month" "+%m "
12
[root@APP ~]# date -s 2013-12-30      
Mon Dec 30 00:00:00 CST 2013
[root@APP ~]# date -d "-1 month" "+%m "
11

当今天是31 号的时候,计算就会出现失误了,我再以典型的2月为例子:
(这种计算是减去上个月的天数(例如2月的28 天)
[root@APP ~]# date -s 2014-03-28       
Fri Mar 28 00:00:00 CST 2014
[root@APP ~]# date -d "-1 month" "+%m "
02
[root@APP ~]# date -s 2014-03-29      
Sat Mar 29 00:00:00 CST 2014
[root@APP ~]# date -d "-1 month" "+%m "
03
[root@APP ~]#

找到一个靠谱的解决办法:

[root@APP ~]# date  +%Y-%m-%d 
2014-03-29
[root@APP ~]# date +%Y-%m-%d -d "-$(date +%d)days -0 month"
2014-02-28
[root@APP ~]# date -d last-month +%Y-%m-%d
2014-03-01
[root@APP ~]# date -d "-1 month" "+%Y-%m-%d"
2014-03-01

没有评论:

发表评论