In [83]: import datetime as dt
In [84]: import time
In [85]: import calendar
In [86]: date=dt.datetime(2010,12,1,0,0,0)
In [87]: date
Out[87]: datetime.datetime(2010, 12, 1, 0, 0)
In [88]: date_utc=dt.datetime.utcfromtimestamp(time.mktime(date.timetuple()))
In [89]: date_utc
Out[89]: datetime.datetime(2010, 12, 1, 5, 0)
In [90]: date_local=dt.datetime.fromtimestamp(calendar.timegm(date_utc.timetuple()))
In [91]: date_local
Out[91]: datetime.datetime(2010, 12, 1, 0, 0)
没有关联的时间,时区不重要。。。日期也不能转换成不同的时区。在另一个专栏里有相关的时间吗?
编辑:好吧,现在有时间了,我让Python大师来接手。;]
我知道在时区之间转换的最简单、最可靠的方法是使用第三方pytz模块:
收益率:
但是请注意,您的数据没有指定日期时间是在EST还是EDT时区。 有些时候,如果不指定EST或EDT,则会产生歧义。例如,“10/27/2002 1:30:00”将是不明确的:
因为夏令时的缘故,这次发生了两次。 还有一些日期,比如2002-04-07 02:30:00, 都不存在。见this link 为了讨论这些甚至更离奇的问题,当处理当地时间。
如果您愿意忽略这些棘手的角落情况,如果您的机器设置在本地时区(如EST/EDT), 有一种方法可以在本地时区和UTC时区之间进行转换 不需要安装
pytz
。其思想是转换日期时间-->;时间元组-->;时间戳-->;UTC日期时间。转换链是用例如:
收益率
上面测试的最后两个日期表明,即使在接近EST和EDT之间切换的时间内,转换也能正常工作。
总之,使用alternate方法(不带pytz),下面是如何将表示本地时间的datetime对象转换为表示GMT的datetime对象 时间,反之亦然:
每个记录的伪代码:
生成时间戳字符串:field[0].strip()+“”+field[1].strip())
使用datetime.datetime.strptime()将其转换为datetime.datetime实例
将timedelta添加到时间戳中,例如timedelta(hours=-4)
使用timestamp.strftime()生成输出所需的任何字符串表示形式。
对于时间字段为空的情况:如果这意味着0:0:0,请修改上面的内容以适应。如果它的意思是“时间未知”,你需要做些别的。。。
相关问题 更多 >
编程相关推荐