Javascript API 呼び出しを Python に変換しようとしています。動作中の JavaScript コードは正常に動作し、次のようなタイムスタンプを生成します。
var curdate = new Date();
var gmtstring = curdate.toGMTString();
var utc = Date.parse(gmtstring) / 1000;
この結果 (エポックからのこの秒数) は、その後ハッシュされ、API 呼び出しで使用されますが、これは関連するセクションです。誰かがこれを変換する正しい方法を私に知らせることができれば、それは大歓迎です.
さまざまな方法によるさまざまな結果の詳細を次に示します。
Javascript(有効な API の結果)
var curdate = new Date(2013, 7, 10);
var gmtstring = curdate.toGMTString();
var utc = Date.parse(gmtstring) / 1000;
結果: 1376089200
Python (無効な API 結果)
from datetime import datetime
import calendar
d = datetime(2013, 8, 10)
calendar.timegm(d.utctimetuple())
結果: 1376092800
私は明らかに何かが欠けています。誰かがこれについて教えてくれますか?
アップデート
Javascript は 0 ベースの日付を使用し、Python の日付は 1 ベースであるため、私は最初に私の例で間違いを犯しました。
Jonathon は、Javascript がデフォルトでローカル タイムゾーンを使用するのに対し、Python がデフォルトで UTC を使用するため、値の違いが異なることを親切に説明してくれました。私の場合、これは GMT であり、これは API が必要とするものです。この結果を Python で取得する必要があります。
答え
解決策は、提供されているタイムゾーンの不一致でした。サードパーティの API にはまだ問題がありますが、少なくとも今は正しい時間を取得しています。
これはおそらくクリーンアップできます。
from datetime import datetime
import calendar
import time
import pytz
def GenerateTimeStamp(d):
europe = pytz.timezone('Europe/London')
d = europe.localize(d)
tuple = d.utctimetuple()
timestamp = int(time.mktime(tuple))
return timestamp
日時を指定するだけです:
GenerateTimeStamp(datetime(2013, 8, 10))
また
GenerateTimeStamp(datetime.utcnow())
補足として、これを試していて、pip を使用して pytz 1をインストールしたい場合は、 pre タグ2を使用して取得できます。
pip install --pre pytz