形式の文字列"%d/%m/%Y"
をタイムスタンプに変換する方法は?
"01/12/2011" -> 1322697600
形式の文字列"%d/%m/%Y"
をタイムスタンプに変換する方法は?
"01/12/2011" -> 1322697600
回答:
>>> import time
>>> import datetime
>>> s = "01/12/2011"
>>> time.mktime(datetime.datetime.strptime(s, "%d/%m/%Y").timetuple())
1322697600.0
calendar.timegm()
か.toordinal()
datetime.datetime.strptime(s, "%d/%m/%Y").timestamp()
少し短い
.timestamp()
想定します。回答のコードは、ローカルタイムゾーンのUTCオフセットがゼロのコンピューターでのみ機能します(予期されるを生成します)。1322697600
文字列を日付オブジェクトに変換するには:
from datetime import date, datetime
date_string = "01/12/2011"
date_object = date(*map(int, reversed(date_string.split("/"))))
assert date_object == datetime.strptime(date_string, "%d/%m/%Y").date()
日付オブジェクトをPOSIXタイムスタンプに変換する方法は、タイムゾーンによって異なります。以下からの変換datetime.date
PythonでUTCタイムスタンプに:
日付オブジェクトはUTCの午前0時を表します
import calendar
timestamp1 = calendar.timegm(utc_date.timetuple())
timestamp2 = (utc_date.toordinal() - date(1970, 1, 1).toordinal()) * 24*60*60
assert timestamp1 == timestamp2
日付オブジェクトは現地時間の午前0時を表します
import time
timestamp3 = time.mktime(local_date.timetuple())
assert timestamp3 != timestamp1 or (time.gmtime() == time.localtime())
UTCと現地時間の午前0時が同じ時間インスタンスでない限り、タイムスタンプは異なります。
NameError: name 'wckCalendar' is not defined
。Windows 32ビットマシンでPython 3.4.1を実行しています。何か案が?ありがとう。
>>> int(datetime.datetime.strptime('01/12/2011', '%d/%m/%Y').strftime("%s"))
1322683200
"%s"
Pythonではサポートされていません。ポータブルではありません。
答えは、入力した日付のタイムゾーンにも依存します。あなたの日付がローカル日付の場合、katrielalexが言ったようにmktime()を使用できます-彼がこの短いバージョンの代わりにdatetimeを使用した理由がわかりません:
>>> time.mktime(time.strptime('01/12/2011', "%d/%m/%Y"))
1322694000.0
しかし、私はおそらく別のTZにいるため、私の結果は彼の結果とは異なることに注意してください(結果はタイムゾーンのないUNIXタイムスタンプです)
入力日付がすでにUTCである場合、正しい解決策は次のとおりです。
>>> calendar.timegm(time.strptime('01/12/2011', '%d/%m/%Y'))
1322697600
単に使用するdatetime.datetime.strptime
:
import datetime
stime = "01/12/2011"
print(datetime.datetime.strptime(stime, "%d/%m/%Y").timestamp())
結果:
1322697600
ローカルタイムゾーンの代わりにUTCを使用するには、次を使用します.replace
。
datetime.datetime.strptime(stime, "%d/%m/%Y").replace(tzinfo=datetime.timezone.utc).timestamp()
float
notint
これらの答えの多くは、日付が最初はナイーブであることを気にすることはありません
正確には、最初にナイーブ日付をタイムゾーン対応の日時にする必要があります
import datetime
import pytz
# naive datetime
d = datetime.datetime.strptime('01/12/2011', '%d/%m/%Y')
>>> datetime.datetime(2011, 12, 1, 0, 0)
# add proper timezone
pst = pytz.timezone('America/Los_Angeles')
d = pst.localize(d)
>>> datetime.datetime(2011, 12, 1, 0, 0,
tzinfo=<DstTzInfo 'America/Los_Angeles' PST-1 day, 16:00:00 STD>)
# convert to UTC timezone
utc = pytz.UTC
d = d.astimezone(utc)
>>> datetime.datetime(2011, 12, 1, 8, 0, tzinfo=<UTC>)
# epoch is the beginning of time in the UTC timestamp world
epoch = datetime.datetime(1970,1,1,0,0,0,tzinfo=pytz.UTC)
>>> datetime.datetime(1970, 1, 1, 0, 0, tzinfo=<UTC>)
# get the total second difference
ts = (d - epoch).total_seconds()
>>> 1322726400.0
また:
多くのタイムゾーンでDOES N'T WORKでfor を使用するpytz
場合tzinfo
は注意してくださいdatetime.datetime
。pytzタイムゾーン付きのdatetimeを参照してください。tzinfoの設定方法に応じて異なるオフセット
# Don't do this:
d = datetime.datetime(2011, 12, 1,0,0,0, tzinfo=pytz.timezone('America/Los_Angeles'))
>>> datetime.datetime(2011, 1, 12, 0, 0,
tzinfo=<DstTzInfo 'America/Los_Angeles' LMT-1 day, 16:07:00 STD>)
# tzinfo in not PST but LMT here, with a 7min offset !!!
# when converting to UTC:
d = d.astimezone(pytz.UTC)
>>> datetime.datetime(2011, 1, 12, 7, 53, tzinfo=<UTC>)
# you end up with an offset
import dateutil.parser
dateutil.parser.parse("01/12/2011", dayfirst=True).timestamp()
"%d/%m/%Y"
形式の時間を期待しています。比較:dateutil.parser.parse("01/02/2001")
anddatetime.strptime("01/02/2001", "%d/%m/%Y")
1322697600
ローカルのタイムゾーンがUTCでない限り、期待どおりの結果は得られません。2014年のコメントを
非常に効率的であるようです:
import datetime
day, month, year = '01/12/2011'.split('/')
datetime.datetime(int(year), int(month), int(day)).timestamp()
ループあたり1.61 µs±120 ns(7回の実行の平均±標準偏差、それぞれ100000ループ)
datetime
の機能は?ライブラリdatetime
からはdatetime
サポートされていません.timestamp()
datetime.timestamp(日時のインスタンス)を使用するだけで、datetimeインスタンスにはタイムゾーン情報が含まれるため、タイムスタンプは標準のutcタイムスタンプになります。日時をタイムタプルに変換すると、タイムゾーンが失われるため、結果はエラーになります。インターフェースを提供したい場合は、次のように記述する必要があります:int(datetime.timestamp(time_instance))* 1000
strptime
from関数を使用してdatetime.datetime
、次のリンクを参照し、日付をタイムゾーンとともに任意の形式から変換できます。
https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
UNIXエポック時間を取得する単純な関数。
注:この関数は、入力日時がUTC形式であることを前提としています(ここのコメントを参照)。
def utctimestamp(ts: str, DATETIME_FORMAT: str = "%d/%m/%Y"):
import datetime, calendar
ts = datetime.datetime.utcnow() if ts is None else datetime.datetime.strptime(ts, DATETIME_FORMAT)
return calendar.timegm(ts.utctimetuple())
使用法:
>>> utctimestamp("01/12/2011")
1322697600
>>> utctimestamp("2011-12-01", "%Y-%m-%d")
1322697600