4

「2012-09-08 12:23:33」のような文字列のタイムスタンプから、エポック時間に基づく秒に多くの会話を行う必要があります.次に、2つのタイムスタンプ間の時間ギャップを取得する必要があります.2つの異なる方法を試しました:

date1 = '2012-09-08'
time2 = '12:23:33'
timelist1 = map(int, date1.split('-') + time1.split(':'))

date2 = '2012-09-08'
time2 = '12:23:33'
timelist2 = map(int, date2.split('-') + time2.split(':'))
delta = datetime.datetime(*timelist2) - datetime.datetime(*timelist1)
print delta.seconds

2 番目の方法は次のとおりです。

date1 = '2012-09-08'
time1 = '12:23:33'
d1 = datetime.datetime.strptime(date1 + ' ' + time1, "%Y-%m-%d %H:%M:%S")
seconds1 = time.mktime(d1.timetuple())
....
seconds2 = time.mktime(d2.timetuple())
print seconds2-deconds1

ただし、これらの 2 つの方法は、1 億近くのアクションを実行する必要があるため、十分に高速ではありません。何か提案はありますか?

4

1 に答える 1

5

datetime.datetime.strptime()関数を使用した方がはるかに良いでしょう。次に、2つの結果を減算します。

import datetime

date1, time1 = '2012-09-08', '12:23:33'
date2, time2 = '2012-09-08', '12:23:33'

dt1 = datetime.datetime.strptime(date1 + ' ' + time1, "%Y-%m-%d %H:%M:%S")
dt2 = datetime.datetime.strptime(date2 + ' ' + time2, "%Y-%m-%d %H:%M:%S")

print (dt1 - dt2).total_seconds()

残りは秒単位で表示されることに注意してください。属性もありdatetime.timedelta.secondsます。代わりに使用すると、はるかに便利で、値を考慮する必要がなくなります。.days.total_seconds().days

datetime.datetime.strptime()メソッドとメソッドを使用するtimedeltaと、作業の大部分がCコードで維持され、より高速になるはずです。

解析ステップのため、どちらの方法も非常に高速ではないことに注意してください。時間テスト:

>>> import timeit
>>> def parse_datetime():
...     date1, time1 = '2012-09-08', '12:23:33'
...     date2, time2 = '2012-09-08', '12:23:33'
...     dt1 = datetime.datetime.strptime(date1 + ' ' + time1, "%Y-%m-%d %H:%M:%S")
...     dt2 = datetime.datetime.strptime(date2 + ' ' + time2, "%Y-%m-%d %H:%M:%S")
...     (dt1 - dt2).total_seconds()
... 
>>> def parse_time():
...     d1 = time.strptime(date1 + ' ' + time1, "%Y-%m-%d %H:%M:%S")
...     d2 = time.strptime(date2 + ' ' + time2, "%Y-%m-%d %H:%M:%S")
...     seconds1 = time.mktime(d1)
...     seconds2 = time.mktime(d2)
...     seconds1 - seconds2
... 
>>> timeit.timeit('test()', 'from __main__ import parse_datetime as test', number=10000)
0.6590030193328857
>>> timeit.timeit('test()', 'from __main__ import parse_time as test', number=10000)
0.7742340564727783

ここで、2番目のメソッドはtime.strptime()関数(タイムタプルを直接出力する)を使用します。

しかし、私が知っている日時文字列を解析するためのより速い方法はありません。

于 2012-09-15T12:50:23.457 に答える