码迷,mamicode.com
首页 > 其他好文 > 详细

使用AWS服务时注意时区的问题

时间:2015-05-06 23:10:58      阅读:362      评论:0      收藏:0      [点我收藏+]

标签:aws   timezone   

最近来到了新的公司,搞起了AWS,会陆续记录一些AWS的东西。今天要讲的就是时区问题,说起来挺简单的,没有服务器跨国的估计注意的人没几个。

我们的EMR机器在US,而实际应用的服务器在CH,同事针对log进行的parser的时候发现实际用户的时间跟我们机器的时间总是有差异,而且排除客户端网络问题差异还挺大。
刚开始没注意,就以为是网络问题,我后来看了看还是。

以下是查找思路:

--服务器时间 大部分为04-26
select collector_tstamp :: date,count(*) from dev.events
group by collector_tstamp :: date order by count(*) desc;
2015-04-26	1012769
2015-04-27	16932

—设备时间 大部分为04-26
select dvce_tstamp :: date,count(*) from dev.events
group by dvce_tstamp :: date order by count(*) desc;
2015-04-26	938746
2015-04-25	90488
2015-04-27	174
....(小于100)


从两点上看会误以为没什么问题。

下面来看diff的数据:
select datediff(m,collector_tstamp,dvce_tstamp) as minute,count(*) from dev.events
group by datediff(m,collector_tstamp,dvce_tstamp) order by count(*) desc;
Minutes cnt
-480	949916
-479	24772
-481	17785
-478	8325
-477	4397
-476	3000
-482	2852
-475	2492
-474	2219
-473	1628
-470	1384
-469	1103


确认后日志轮转没问题后,检查了EMR程序,发现在调用python的time库时进行localtime的转化
EMR python script:
row['dvce_tstamp'] = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(int(row['dvce_tstamp'])/1000))

所以问题就发现了。
RootCause: 本地代码上传AWS做时间处理需要进行timezone的指定

不指定的时候测试结果:
本地机器:
>>> print time.localtime(1430378360)
time.struct_time(tm_year=2015, tm_mon=4, tm_mday=30, tm_hour=15, tm_min=19, tm_sec=20, tm_wday=3, tm_yday=120, tm_isdst=0)

EMR机器:
>>> print time.localtime(1430378360)
time.struct_time(tm_year=2015, tm_mon=4, tm_mday=30, tm_hour=7, tm_min=19, tm_sec=20, tm_wday=3, tm_yday=120, tm_isdst=0)



--

使用AWS服务时注意时区的问题

标签:aws   timezone   

原文地址:http://blog.csdn.net/tonylee0329/article/details/45538893

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!