Chinaunix

标题: 通过设置时区来计算N天之前日期的Shell小程序 [打印本页]

作者: CNL    时间: 2004-10-26 11:17
标题: 通过设置时区来计算N天之前日期的Shell小程序
向曾经询问如何通过调整时区获得昨天日期的网友致歉,
我当时认为不可能,今天看老外的坛子,发现事实上是可以的。
一般系统安装都是基于RTC时钟的,所以方法应当通用。
为了通用,我在老外的例子上做了一些改动,请各位需要的参考:
#!/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

作者: xchen301    时间: 2004-10-26 15:27
标题: 通过设置时区来计算N天之前日期的Shell小程序
谢谢,收到!

顺便问一句,老外的坛子能给地址吗,呵呵
作者: CNL    时间: 2004-10-26 15:32
标题: 通过设置时区来计算N天之前日期的Shell小程序
我经常去这个老外坛子:
http://unix.derkeiler.com/Newsgroups/
作者: xchen301    时间: 2004-10-26 15:43
标题: 通过设置时区来计算N天之前日期的Shell小程序
cnl,我有个疑问,这个shell是通过awk的printf来显示日期格式,这样把时间转换吧??
作者: CNL    时间: 2004-10-26 16:00
标题: 通过设置时区来计算N天之前日期的Shell小程序
printf是输出日期差值所在的时区值
作者: meteor06    时间: 2004-10-26 16:13
标题: 通过设置时区来计算N天之前日期的Shell小程序
的确用TZ 的方式取时间很方便

但是需要注意
1.最好不要在命令行执行相关命令,会改变时间的,如果这时候运行了相关的应用,会造成时间不对
2.北京是东八区,取前一天时间
TZ=TZ+16就是前一天,
如果取TZ=TZ+24 会有问题,在早上八点前执行,取到的是前天日期
作者: CNL    时间: 2004-10-26 16:26
标题: 通过设置时区来计算N天之前日期的Shell小程序
对,不要在shell命令行上,使用要编写个shell执行
meter06老大说的CST+16,意思是北京时区CST-8中的-8+24=16
作者: xchen301    时间: 2004-10-26 16:33
标题: 通过设置时区来计算N天之前日期的Shell小程序
原帖由 "meteor06" 发表:
的确用TZ 的方式取时间很方便

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


传说中的大虾出现了,呵呵,为什么取TZ=TZ+24会出问题?一定要早上8点吗,这个跟时间有关系吗,谢谢
作者: meteor06    时间: 2004-10-26 16:42
标题: 通过设置时区来计算N天之前日期的Shell小程序
原帖由 "xchen301" 发表:


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


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

TZ+24与格林威治时间相差24小时
2者的时间差一共是24+8=32个小时
作者: hnpygqs    时间: 2004-10-26 17:07
标题: 通过设置时区来计算N天之前日期的Shell小程序
meter06老大你说的是-8+24=+16吧
北京是CST-8那么昨天就是CST(-8+24)=CST+16啦
作者: CNL    时间: 2004-10-26 17:59
标题: 通过设置时区来计算N天之前日期的Shell小程序
是的,
CST+16表示时区代码为CST(SCO标准中北京时区的简称),
+16代表虚拟的西16区(实际并不存在),和东8区(-8 )间隔早24小时就是昨天
依次类推CST+40代表虚拟的西40区,和东8区(-8 )间隔早48小时(两天)就是前天
作者: xchen301    时间: 2004-10-26 18:52
标题: 通过设置时区来计算N天之前日期的Shell小程序
哦,明白了,谢谢各位!!!
作者: hnpygqs    时间: 2004-10-27 20:28
标题: 通过设置时区来计算N天之前日期的Shell小程序
不错,不过通过时区设置有一个局限,不能计算超过1年间隔的日期的
装个GNU的gdate吧,在shell里调gdate很方便算日期的
作者: gny31306    时间: 2006-12-23 23:19
原帖由 CNL 于 2004-10-26 11:17 发表
向曾经询问如何通过调整时区获得昨天日期的网友致歉,
我当时认为不可能,今天看老外的坛子,发现事实上是可以的。
一般系统安装都是基于RTC时钟的,所以方法应当通用。
为了通用,我在老外的例子上做了一些改 ...



老大,,输出结果为

TZ=+24 TIME=六 12月 23 15:06:12 2006
作者: kingsunx    时间: 2006-12-25 15:39
好象不通用啊.
date:
Mon Dec 25 14:48:56 CST 2006
N=1时:
TZ=CST+16 TIME=Sun Dec 24 14:48:08 CST 2006
N=-1时:
TZ=CST-32 TIME=Mon Dec 25 06:50:29 GMT 2006
N=2时:
TZ=CST+40 TIME=Mon Dec 25 06:51:22 GMT 2006

结果只有 N=1 时正确.其他的好象都不对啊.我用的是 SCO506.
作者: xuxiabiao    时间: 2007-06-18 16:13
awk -v 什么意思




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2