269

エポックからの秒数が必要なUTCの時間があります。

strftime を使用して秒数に変換しています。例として 2012 年 4 月 1 日を取り上げます。

>>>datetime.datetime(2012,04,01,0,0).strftime('%s')
'1333234800'

エポックからの 2012 年 4 月 1 日の UTC は 1333238400 ですが、上記は 1333234800 を返し、1 時間異なります。

そのため、strftime はシステム時間を考慮して、どこかにタイムゾーン シフトを適用しているようです。datetime は純粋にナイーブだと思いましたか?

どうすればそれを回避できますか?可能であれば、標準でない限り他のライブラリをインポートしないようにします。(移植性に懸念があります)。

4

8 に答える 8

513

Python の日時をエポック以降の秒数に変換する場合は、明示的に行うことができます。

>>> (datetime.datetime(2012,04,01,0,0) - datetime.datetime(1970,1,1)).total_seconds()
1333238400.0

timestamp()Python 3.3 以降では、代わりに以下を使用できます。

>>> datetime.datetime(2012,4,1,0,0).timestamp()
1333234800.0

使用してはいけない理由datetime.strftime('%s')

Python は %s を strftime の引数として実際にサポートしていません ( http://docs.python.org/library/datetime.html#strftime-and-strptime-behaviorで確認すると、リストにありません)。それが機能している理由は、Python がローカル タイムゾーンを使用するシステムの strftime に情報を渡しているためです。

>>> datetime.datetime(2012,04,01,0,0).strftime('%s')
'1333234800'
于 2012-07-31T15:10:58.887 に答える
109

タイムゾーンなどに深刻な問題がありました。Python がたまたますべてを処理する方法は、(私にとって) かなり混乱しています。calendar モジュールを使用すると問題なく動作しているようです (リンク123、および4を参照)。

>>> import datetime
>>> import calendar
>>> aprilFirst=datetime.datetime(2012, 04, 01, 0, 0)
>>> calendar.timegm(aprilFirst.timetuple())
1333238400
于 2012-07-31T15:04:33.757 に答える
37
import time
from datetime import datetime
now = datetime.now()

time.mktime(now.timetuple())
于 2013-06-20T01:31:43.507 に答える
7

Unix /エポック時間のタイムスタンプが必要な場合は、次の1行で機能します。

created_timestamp = int((datetime.datetime.now() - datetime.datetime(1970,1,1)).total_seconds())
>>> created_timestamp
1522942073L

datetime python2 と python3 の動作のみに依存します

于 2018-04-05T19:27:43.190 に答える
0

Python 3.7 では

date.isoformat() および datetime.isoformat() によって生成された形式のいずれかで、date_string に対応する日時を返します。具体的には、この関数は YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]] 形式の文字列をサポートします。 、ここで * は任意の 1 文字に一致できます。

https://docs.python.org/3/library/datetime.html#datetime.datetime.fromisoformat

于 2018-11-25T13:51:53.703 に答える