2016-04-27 13 views
0

私はすべてをUTCで保存し、設定にはTIME_ZONE = 'UTC'USE_TZ = TrueというPython + Djangoアプリを持っています。 POSIXタイムスタンプを変換する場合、私はfromtimestampの両方の味から同じ出力を得る:Pythonのutcfromtimestampとfromtimestampは同じ値を出力していますか?

start_seconds = 1461798000000/1000.0 

start = datetime.datetime.utcfromtimestamp(start_seconds) 
print('With utc: %s' % start) 
>>>> With utc: 2016-04-27 23:00:00 

start2 = datetime.datetime.fromtimestamp(start_seconds) 
print('Without utc: %s' % start2) 
>>>> Without utc: 2016-04-27 23:00:00 

これはなぜでしょうか?

答えて

1

あるとucfromtimestamp()同じ値を返し、それがローカルタイムゾーンがある時点でゼロオフセットUTCを有することを意味します。 Djangoはローカルタイムゾーン(TZのenvvar)を設定し、あなたのケースではUTCのTIME_ZONEの設定を反映しますが、utcのオフセットはUTCでゼロです(明らかに)。

所与POSIXタイムスタンプに対応するタイムゾーン対応DateTimeオブジェクトを取得するには、次の値がエッジの場合で異なっていてもよい

dt = datetime.fromtimestamp(start_seconds, pytz.utc) 

:Unixの時間を変換する

from datetime import datetime, timedelta 
import pytz 

dt = datetime(1970, 1, 1, tzinfo=pytz.utc) + timedelta(seconds=start_seconds) 

を。

+0

説明とコードスニペットをありがとうございます。 – felizuno

0

あなたのコードを実行すると、予想される結果が得られます。これは、それぞれのタイムゾーンにオフセットされた素朴な日付です。 epochconverterによるとfromtimestamp()場合は、提供したタイムスタンプは、2016年4月27日23時00分○○秒UTC

In[23]: import datetime 
In[24]: start_seconds = 1461798000000/1000.0 
In[25]: start = datetime.datetime.utcfromtimestamp(start_seconds) 
In[26]: print('With utc: %s' % start) 
With utc: 2016-04-27 23:00:00 # Correct UTC time 
In[27]: start2 = datetime.datetime.fromtimestamp(start_seconds) 
In[28]: print('Without utc: %s' % start2) 
Without utc: 2016-04-27 19:00:00 # Correct EDT time (my local timezone) 
関連する問題