unix下取昨日日期

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表示与标准时间的时差。
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值