linux  下gnu shell 的date命令很方便解决这个问题,
echo `date -d yesterday +%Y%m%d`
输出:20120912

但是公司的 服务器是Unix,shell版本为ksh不能使用‘-d’选项 不能直接获取昨天的日期和时间
然后在网上搜索,发现有人已经问过这个问题,
答案就是:
echo `TZ=aaa24 date +%Y%m%d`
输出:20120912

测试一下满心欢喜,于是写入crontab任务,第二天凌晨1点自动备份 数据库
结果第二天上班却发现备份了前台的既20120911的数据。
然后在 服务器上直接运行备份的脚本,仍然备份的是12日的数据。很奇怪。
于是打印出具体时间
echo `date +%Y%m%d\ %H:%M:%S`
20120913 01:12:18
echo `TZ=aaa24 date +%Y%m%d\ %H:%M:%S`
输出:20120911 17:13:43

原来这种方法是有风险的,
date打印的并不是本地时区的时间,而是标准时间,既伦敦时间。
伦敦在西一区,北京在东八区相差八个时区,所以我们上午一点的时候他们本来就是昨天的下午5点。
然后在这个基础上又增加一天,所以得到的是前天的下午五点。。。

。。。
地理学不好,程序也写不好啊。。

所以只要将时区进行调整才能正确的打印出当前时区的昨天的日期和时间。
echo `TZ=aaa16 date +%Y%m%d\ %H:%M:%S`
输出: 20120912 01:18:02 
这才是正确的日期和时间。

刚开始没有搞清楚TZ的正确意思所以才生搬硬套,浪费了时间。
TZ是一个系统的环境变量,记录了系统所在的时区,aaa可以为任意字符串,16和24表示与标准时间的时差。
Logo

更多推荐