date几种常用的时间转换
此文为转载,出处:http://blog.csdn.net/hittata/article/details/7187692
1)使用date获得一个具体的时间
平时需要生成例如像“2015-04-06” 或者 “2015-04-06 00:00:00” 或者像当前时间的随机时间,需要借助shell中的date函数。具体如下:
如果需要获得shortDate类型,可以将date类型格式化为:
[root@localhost lily]# date +"%Y-%m-%d"
2015-04-07
[root@localhost lily]# date +"%Y-%m-%d %H:%M:%S"
2015-04-06 20:00:43
[root@localhost lily]# date +"%Y-%m-%d %H:%M:%S" -d "+10hour"
2015-04-07 06:00:56
[root@localhost lily]# date +"%Y-%m-%d %H:%M:%S" -d "+24hour"
2015-04-07 20:00:43
[root@localhost lily]# date +"%Y-%m-%d %H:%M:%S" -d "-24hour"
2015-04-05 20:00:43
[root@localhost lily]# date +"%Y-%m-%d %H:%M:%S" -d "-20minute"
2015-04-06 19:43:44
[root@localhost lily]# date +"%Y-%m-%d %H:%M:%S" -d "+20minute"
2015-04-06 20:23:44
[root@localhost lily]# date +"%Y-%m-%d %H:%M:%S" -d "+2day"
2015-04-08 19:43:44
[root@localhost lily]# date +"%Y-%m-%d %H:%M:%S" -d "-2day"
2015-04-04 19:43:44
[root@localhost lily]# date +"%Y-%m-%d %H:%M:%S" -d "-2month"
2015-02-06 19:43:44
[root@localhost lily]# date +"%Y-%m-%d %H:%M:%S" -d "+2month"
2015-06-06 19:43:44
[root@localhost lily]# date +"%Y-%m-%d %H:%M:%S" -d "+2year"
2017-04-06 19:43:44
[root@localhost lily]# date +"%Y-%m-%d %H:%M:%S" -d "-2year"
2013-04-06 19:43:44
2)使用date获得一个随机的时间
例如:当前时间为2015-04-07,获取30天内的随机时间
精确到日期:
date +"%Y-%m-%d" -d "+$(($RANDOM%30)) days"
2015-05-05
精确到秒:
date +"%Y-%m-%d %H:%M:%S" -d "+$(($RANDOM%30)) days"
2015-04-08 11:24:40
3)使用date获取一个随机的数值,作为获取随机数的基数
[chengmo@centos5 shell]$ date +%s
1287764773
#获得时间戳,当前到:1970-01-01 00:00:00 相隔的秒数
#如果用它做随机数,相同一秒的数据是一样的。在做循环处理,多线程里面基本不能满足要求了。
[chengmo@centos5 shell]$ date +%N
738710457
#获得当前时间的纳秒数据,精确到亿分之一秒。
#这个相当精确了,就算在多cpu,大量循环里面,同一秒里面,也很难出现相同结果,不过不同时间里面还会有大量重复碰撞
[chengmo@centos5 shell]$ date +%s%N
1287764807051101270
#这个可以说比较完美了,加入了时间戳,又加上了纳秒
4)时间戳和字符串相互转换
用shell将时间字符串与时间戳互转:date -d "2010-10-18 00:00:00" +%s 输出形如:1287331200
而时间戳转换为字符串可以这样做:
date -d @1287331200 "+%Y-%m-%d" 输出形如:2010-10-18
如果需要得到指定日期的前后几天,可以:
1、seconds=`date -d "2010-10-18 00:00:00" +%s` #得到时间戳
2、seconds_new=`expr $seconds + 86400` #加上一天的秒数86400
3、date_new=`date -d @$seconds_new "+%Y-%m-%d"` #获得指定日前加上一天的日前
转载出处:http://www.cnblogs.com/chengmo/archive/2010/10/23/1858879.html