web-dev-qa-db-ja.com

datetime.fromtimestampとdatetime.utcfromtimestampのどちらを使用する方が安全ですか?

センサーからいくつかのデータを収集していますが、次のようにしてタイムスタンプを取得しています。

_   "time": {
            "seconds": 40, 
            "year": 115, 
            "month": 5, 
            "hours": 7, 
            "time": 1434549820776, 
            "date": 17, 
            "minutes": 3, 
            "day": 3, 
            "timezoneOffset": 420
        },
_

私はpythonセンサーからのデータを処理するスクリプト(受信データはjson形式))を持っています。timeの値を取得し、読み取り可能な時刻形式に変換します。

私はdatetime.fromtimestamp(1434549820776/1000).strftime('%Y-%m-%d %H:%M:%S')を使用し、それは_'2015-06-17 15:03:40'_を返しました

どこでdatetime.utcfromtimestamp(1434549820776/1000).strftime('%Y-%m-%d %H:%M:%S')が返されたか:_'2015-06-17 14:03:40'_

あなたができるように時間差があるので、私の質問はどちらを使うのが良いですか?

8
cyberbemon

Jsonを見ると、タイムスタンプがローカルで2015-06-17 07:03:40に対応していることがわかります。

TimezoneOffsetは、現地時間とUTC時間の間に7時間の差があることを示しています=> jsonに対応するUTC時間は2015-06-17 14:03:40です。

これはdatetime.utcfromtimestamp(1434549820776/1000).strftime('%Y-%m-%d %H:%M:%S')(=> '2015-06-17 14:03:40')を使用したときに取得されるものであるため、タイムスタンプはUTC時間で書き込まれるため、utcfromtimestampを使用する必要があります。あなたは正確になりたいです。

5
Julien Spronck

どちらも正しく、単純に同じ時間を与えるわけではありません。どちらも、タイムスタンプはエポックからのミリ秒数(通常は1/01/1970 00:00 UTC)であると想定しています。

  • fromtimestamp日付と時刻を現地時間で与えます
  • utcfromtimestampは、日付と時刻をUTCで示します。

どこに住んでいるのかわからないので(イギリス?)スペイン、フランス、ベルギー、デンマークでは、現地時間は冬はUTC + 1、夏はUTC + 2です。

あなたは、UTC時間と現地時間のどちらが必要かを知っている必要があります。

7
Serge Ballesta

基本的に、機能するものを使用したいとします。理想的には、ドキュメントには、センサーが時間を報告するタイムゾーンが含まれます。センサーにタイムゾーンの認識が含まれている可能性は低いため、センサーをセットアップする人が最初に時間を設定するのと同じタイムゾーンにある可能性があります。

センサーで設定する時間を自由に決定できる場合、夏時間などのあらゆる種類のトラブルを回避できるため、通常はUTCを使用することをお勧めします。また、国際チームでもうまく機能します。

プログラムが実行されているPCのタイムゾーン設定とセンサーが一致していることが確実でない場合は、datetime.fromtimestamp(1434549820776/1000, timezone)でも正しい答えかもしれません。

0
textshell