2017-01-23 7 views
2

データベースから同じ日時にアクセスする2つの別々のマシン(ローカル開発とサーバー)があります。 DateTimeオブジェクトは、両方のマシン上で(タイムゾーンを含む)と同じ値を持っている:pythonのdatetime.strftimeを強制的にUTCで出力するにはどうしたらいいですか?

ローカル

print ts 
> datetime.datetime(2017, 1, 13, 7, 18, 9, 209000, tzinfo=<UTC>) 

サーバー

print ts 
> datetime.datetime(2017, 1, 13, 7, 18, 9, 209000, tzinfo=<UTC>) 

はしかし、strftimeの出力は、両方のマシンに異なっています:

ローカル

print ts.strftime('%s') 
> 1484320689 

サーバー

print ts.strftime('%s') 
> 1484291889 

ここで何が起こっているの?クライアントとサーバーの両方で、同じタイムスタンプ文字列をUTCで出力するにはどうすればよいですか?

+0

適切に複製できるように、dtを作成する正確な方法を含めてください。なぜなら私は通常 'dtとしてimport datetimeを使用するでしょうから、' print dt'は ''を返します。明らかに、これは問題を再現しません(データベースの読み込みが不足しています)が、正確なテストケースを自分で作成する方法はわかりません。 – roganjosh

+0

@roganjosh dtはデータベースから取得した変数の名前に過ぎませんでした。 import datetime.datetime as dtなどのインポートとの混乱を避けるために、名前を 'ts'に変更しました。 – Paul

+0

'print datetime.utcnow()。replace(tzinfo = pytz.utc).strftime( '%s') ' 2つの別々のマシンで実行すると、両方のマシンで 'datetime.utcnow()'が同じであっても、値(数秒以上) – Paul

答えて

0

誰かがこの投稿に出会う場合、私は解決策を見つけました。

strftimeは常に現地時間に変換しようとしていますが、それについてはあまりできません。あなたのミリ秒を必要とする場合

return calendar.timegm(datetime.utcnow().timetuple()) 

return calendar.timegm(self.timestamp.timetuple()) * 1000 + self.timestamp.microsecond/1000 

またはマイクロ秒のための同様の

ソリューションは、カレンダーを使用していました。

関連する問題