UTCで、エポックからの経過秒数を求めます。
私はそれを秒数に変換するためにstrftimeを使っています。例として2012年4月1日を取ります。
>>>datetime.datetime(2012,04,01,0,0).strftime('%s')
'1333234800'
2012年4月1日のEpochからのUTCは1333238400ですが、これは1333234800を返します。これは1時間異なります。
つまり、strftimeは私のシステム時間を考慮に入れ、タイムゾーンシフトをどこかに適用しているようです。 datetimeは純粋に単純なものだと思いましたか?
どうすればそれを回避できますか?可能であれば、標準以外のライブラリをインポートしないようにします。 (私は移植性の問題を抱えています)。
もしあなたがPythonの日時をEpochからの秒数に変換したいのであれば、明示的にそれを行うことができます。
>>> (datetime.datetime(2012,04,01,0,0) - datetime.datetime(1970,1,1)).total_seconds()
1333238400.0
Python 3.3以降では、代わりに timestamp()
を使用できます。
>>> datetime.datetime(2012,4,1,0,0).timestamp()
1333234800.0
なぜdatetime.strftime('%s')
を使うべきではないのか
Pythonは実際にはstrftimeの引数として%sをサポートしていません( http://docs.python.org/library/datetime.html#strftime-and-strptime-behaviorをチェックした場合) これはリストには含まれていません。これが機能する唯一の理由は、Pythonがローカルのタイムゾーンを使用するシステムのstrftimeに情報を渡すためです。
>>> datetime.datetime(2012,04,01,0,0).strftime('%s')
'1333234800'
import time
from datetime import datetime
now = datetime.now()
time.mktime(now.timetuple())
import time
from datetime import datetime
now = datetime.now()
# same as above except keeps microseconds
time.mktime(now.timetuple()) + now.microsecond * 1e-6
(すみません、それは私が既存の答えについてコメントさせないでしょう)
あなたがちょうどunix/Epoch時間にタイムスタンプを必要とするならば、この1行は働きます:
created_timestamp = int((datetime.datetime.now() - datetime.datetime(1970,1,1)).total_seconds())
>>> created_timestamp
1522942073L
そしてpython2とpython3のdatetime
の動作にのみ依存します
これはPython 2と3で動作します。
>>> import time
>>> import calendar
>>> calendar.timegm(time.gmtime())
1504917998
公式ドキュメントに従ってください... https://docs.python.org/2/library/time.html#module-time
Python 3.7では
Date.isoformat()およびdatetime.isoformat()によって発行されたフォーマットの1つでdate_stringに対応するdatetimeを返します。具体的には、この関数はYYYY-MM-DD [* HH [:MM [:SS [.fff [fff]]]] [+ HH:MM [:SS [.ffffff]]]]という形式の文字列をサポートします。 *は任意の1文字と一致します。
https://docs.python.org/3/library/datetime.html#datetime.datetime.fromisoformat
時間帯に依存しない明示的な解決策については、pytzライブラリを使用してください。
import datetime
import pytz
pytz.utc.localize(datetime.datetime(2012,4,1,0,0), is_dst=False).timestamp()
出力(フロート):1333238400.0