2017-04-17 75 views
3

由于我无法控制的原因,因此无法升级到Python 3(它对时区有更好的支持),所以我使用的是Python 2。Python2的日期时间 - 将纪元时间转换为UTC时间戳与偏移量

我有一个像1492464960.53这样的时代,我想将它转换成这样的时间戳2017-04-17T21:36:00.530000+00:00

我尝试使用下面的代码,但这并不给我需要的时间戳的+00:00部分。

import datetime 
created=1492464960.53 
time_str = datetime.datetime.utcfromtimestamp(created).isoformat() 
print(time_str) 
>> 2017-04-17T21:36:00.530000 

如何添加+00:00部件?

回答

1

刚试过这个,它为我工作。

首先解释为什么原始解决方案不起作用,据我所知,isoformat()不适用于上述时期值的原因是因为此方法要求对象使用'utcoffset'属性返回某些内容,但是当我用这个属性测试它时,float/epoch上面的值返回'None'。 如果我们没有处理转换float的话,isoformat方法可能会工作得很好。

不管怎么说,到解决方案:

from datetime import datetime, tzinfo 
import pytz 
created = 1492464960.53 
dt = datetime.utcfromtimestamp(created) 

##print results for above 'dt' variable 

2017-04-17 21:36:00.530000 

dt = dt.replace(tzinfo=pytz.utc) 

##print results for above 'dt' variable 

2017-04-17 21:36:00.530000+00:00 

dt.isoformat() 

##print results for above 'dt' variable 

'2017-04-17T21:36:00.530000+00:00' 
+0

谢谢!有没有什么办法可以在不使用pytz的情况下得到相同的结果?我真的没有选择在我的服务器上安装它。 – activelearner

0

对不起,不知道你的意思究竟是什么有关安装pytz,我只是点子安装pytz加入import语句在我的Python壳我的本地机器上。

不知道这是最好的解决办法,但它似乎已经奏效所以这里是另类我可以提供:

created = 1492464960.53 
dt = dt.utcnow().fromtimestamp(created, dt.tzname()).isoformat() 

应打印

“2017-04-17T14:36 :00.530000'

from datetime import time 
t = time(00, 00, 00, tzinfo=dt.tzname()) 
tmstmp = dt.isoformat()+'+'+t.strftime("%M:%S %z") 

应打印

2017-04-17T21:36:00.530000 + 00:00

+0

请编辑您的[答](http://stackoverflow.com/a/43461380),而不是发布另一个。 – FTP

+0

我的歉意Gerry,认为这是我在Stackoverflow上回答的第一个或第二个问题。将来一定会编辑:) –