• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

通过设置时区来计算N天之前日期的Shell小程序

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 64次 | 进入软件测试论坛讨论

领测软件测试网
向曾经询问如何通过调整时区获得昨天日期的网友致歉,
我当时认为不可能,今天看老外的坛子,发现事实上是可以的。
一般系统安装都是基于RTC时钟的,所以方法应当通用。
为了通用,我在老外的例子上做了一些改动,请各位需要的参考:
[quote:2cdae2f838]
#!/bin/sh
N=1 # N>0获得多少天前的日期,N<0获得多少天之后的日期
OTZ=$TZ
TZ=`echo $TZ | awk -v nn=$N '{h=substr($1,1,3); 
 a=substr($1,4);b=a+24*nn;printf("%s%+d",h,b)}'`
export TZ
echo "TZ="$TZ "TIME="`date`
TZ=$OTZ;export TZ
[/quote:2cdae2f838]

 xchen301 回复于:2004-10-26 15:27:22
谢谢,收到!

顺便问一句,老外的坛子能给地址吗,呵呵

 CNL 回复于:2004-10-26 15:32:43
我经常去这个老外坛子:
http://unix.derkeiler.com/Newsgroups/

 xchen301 回复于:2004-10-26 15:43:30
cnl,我有个疑问,这个shell是通过awk的printf来显示日期格式,这样把时间转换吧??

 CNL 回复于:2004-10-26 16:00:47
printf是输出日期差值所在的时区值

 meteor06 回复于:2004-10-26 16:13:03
的确用TZ 的方式取时间很方便

但是需要注意
1.最好不要在命令行执行相关命令,会改变时间的,如果这时候运行了相关的应用,会造成时间不对
2.北京是东八区,取前一天时间
TZ=TZ+16就是前一天, 
如果取TZ=TZ+24 会有问题,在早上八点前执行,取到的是前天日期

 CNL 回复于:2004-10-26 16:26:57
对,不要在shell命令行上,使用要编写个shell执行
meter06老大说的CST+16,意思是北京时区CST-8中的-8+24=16

 xchen301 回复于:2004-10-26 16:33:21
[quote:6682e54a63="meteor06"]的确用TZ 的方式取时间很方便

但是需要注意
1.最好不要在命令行执行相关命令,会改变时间的,如果这时候运行了相关的应用,会造成时间不对
2.北京是东八区,取前一天时间
TZ=TZ+16就是前一天, 
如果取TZ=TZ+24 会..........[/quote:6682e54a63]

传说中的大虾出现了,呵呵,为什么取TZ=TZ+24会出问题?一定要早上8点吗,这个跟时间有关系吗,谢谢 :lol:

 meteor06 回复于:2004-10-26 16:42:47
[quote:2c96043967="xchen301"]

传说中的大虾出现了,呵呵,为什么取TZ=TZ+24会出问题?一定要早上8点吗,这个跟时间有关系吗,谢谢 :lol:[/quote:2c96043967]

北京是东八区,也就是TZ-8,

TZ+24与格林威治时间相差24小时
2者的时间差一共是24+8=32个小时

 hnpygqs 回复于:2004-10-26 17:07:31
meter06老大你说的是-8+24=+16吧
北京是CST-8那么昨天就是CST(-8+24)=CST+16啦

 CNL 回复于:2004-10-26 17:59:08
是的,
CST+16表示时区代码为CST(SCO标准中北京时区的简称), 
+16代表虚拟的西16区(实际并不存在),和东8区(-8 )间隔早24小时就是昨天
依次类推CST+40代表虚拟的西40区,和东8区(-8 )间隔早48小时(两天)就是前天

 xchen301 回复于:2004-10-26 18:52:39
哦,明白了,谢谢各位!!!

 hnpygqs 回复于:2004-10-27 20:28:17
不错,不过通过时区设置有一个局限,不能计算超过1年间隔的日期的
装个GNU的gdate吧,在shell里调gdate很方便算日期的

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网