Linux时间戳及时间差计算
转载原文http://www.sunjianhe.com/?p=760
使用时间戳转换为具体格式的日期输出,输出格式为:date -d ’1970-01-01 UTC Timestamp seconds’ +”%Y-%m-%d %T %z”
[root@mail161-Centos ~]#date
Wed Oct 27 09:49:22 CST 2010
[root@mail161-Centos ~]#date +%s
1288144164
[root@mail161-Centos ~]#date -d ’1970-01-01 UTC 1288144164 seconds’ +”%Y-%m-%d %T %z”
2010-10-27 09:49:24 +0800
得到明天的日期:date -d “1 days” +%d 或者 date -d “tomorrow” +%d
得到昨天的日期:date -d “1 days ago” +%d或者 date -d “yesterday” +%d
得到今天的日期:date -d “0 days” +%d或者date -d “now” %d
得到今天后n天的日期:date -d “n days” +%d
得到今天前n天的日期:date -d “n days ago” +%d
其中n为具体的某个整数
类似的用法有:date -d “1 years” +%Y得到一年后是多少年
date -d “1 years ago” +%Y得到一年前是多少年
如下是在处理shell时经常用到的:
1. 时间加减
这里处理方法,是将基础的时间转变为时间戳,然后,需要增加或者改变时间,变成 秒。
如:1990-01-01 01:01:01 加上 1小时 20分
处理方法:
a.将基础时间转为时间戳
time1=$(date +%s -d ’1990-01-01 01:01:01′)
echo $time1
631126861 【时间戳】
b.将增加时间变成秒
[root@localhost ~]# time2=$((1*60*60+20*60))
[root@localhost ~]# echo $time2
4800
c.两个时间相加,计算出结果时间
time1=$(($time1+$time2))
time1=$(date +%Y-%m-%d\ %H:%M:%S -d “1970-01-01 UTC $time1 seconds”);
echo $time1
1990-01-01 02:21:01
2. 时间差计算方法
如:2010-01-01 与 2009-01-01 11:11:11 时间差
原理:同样转成时间戳,然后计算天,时,分,秒
time1=$(($(date +%s -d ’2010-01-01′) – $(date +%s -d ’2009-01-01 11:11:11′)));
echo time1
将time1 / 60 秒,就变成分了。
补充说明:
shell 单括号运算符号:
a=$(date);
等同于:a=`date`;
双括号运算符:
a=$((1+2));
echo $a;
等同于:
a=`expr 1 + 2`