向曾询问如何通过调整时区获得昨天日期的网友致歉,
我当时认为不可能,今天看老外的坛子,发现事实上是能够的。
一般系统安装都是基于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很方便算日期的 |
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




