异想天开

What's the true meaning of light, Could you tell me why

linux时间

日期:2014-09-13 15:07:30
  
最后更新日期:2014-09-13 15:14:04
【技术文章,非码农勿入】
某天写个脚本,需求为统计前一天的查询量。当时想的计算方法就是:
[code lang="cpp"]
import time
now=int(time.time())
now=((now+3600*24-1)/3600*24)*3600*24-3600*24
[/code]
意思是先取到第二天的午夜0:0分,然后减去一天的秒数。 当我用:
[code lang="cpp"]
date -d "@时间戳"
[/code]
得到的是,前一天8点,而不是0点。当时,感觉好奇怪,以为是计算出错或丢失精度,手工用计算器算了一次,还是一样。
后来换了一种计算方式:
[code lang="cpp"]
print time.mktime((2013,9,13,0,0,0,5,256,0))
[/code]
用localtime得到time_struct构造今天午夜的time_struct,再mktime转化过去,得到正确结果。
前面一次计算错误的原因?第一次计算now默认now是从0开始,当UTC 00:00分,也就是unixtime的1970 1月1号 0时0分,在我的时区(东八区)是1970年 1月1号 8时0分。
[code lang="cpp"]
[root@bogon ~]# date -d "@0"
1970年 01月 01日 星期四 08:00:00 CST
[root@bogon ~]# date --utc -d "@0"
1970年 01月 01日 星期四 00:00:00 UTC
[/code]
而统计的需求,肯定是根据我现在的时区的0点到24点。另外说一点,http请求web服务器返回的时间格式为:
[code lang="cpp"]
Date:Sun, 31 Aug 2014 09:11:07 GMT
[/code]
用的格林治时间即子午线上的时间。