2017-04-17 17 views
3

私のコントロールできない理由によりPython 2を使用しているため、Python 3(タイムゾーンのサポートが改善されています)にアップグレードできません。Python2 datetime - オフセット付きのエポックタイムを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

ちょうどこれを試してみて、それは私のために働いた。

最初の解決策がうまくいかなかった理由を理解してください。なぜなら、このメソッドは 'utcoffset'属性を使ってオブジェクトを返す必要があるため、isoformat()は上記のエポック値では機能しません。 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はその後、私のローカルマシン上で私のpythonシェルでimport文を追加しました。

ない、これが最善の解決策であることを確認、しかし私が提供できる選択肢であるので、ここで働いているようだ:36:

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

」2017-04-17T14を印刷する必要があります: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

私の謝罪ジェリー、これは私がStackoverflowで答えた最初または2番目の質問だと思います。将来編集することを確認します:) –

関連する問題