5

Python で読んでいる日時を含むデータ ソースがあります。Python は 1 ~ 24 ではなく 0 ~ 23 の日付を保持するため、プログラムは常に 24 時間目に終了します。

「2012/15/01 24」のような文字列を取得したことを考えると、これを処理する最善の方法は何ですか?

正規表現を使用して日付を抽出し、それを日時に変換してから、再び正規表現を使用して時間を取得し、int に変換し、時間を減算してから日時に追加することができますが、それは苦痛のようです。

これに対するより良い方法、またはより一般的なアプローチはありますか?

4

3 に答える 3

6

私のものではありませんが、それは仕事をします。

try:
     time = datetime.datetime.strptime(time, " %H:%M:%S.%f")
except ValueError:
     time = time.replace(' 24', ' 23')
     time = datetime.datetime.strptime(time, " %H:%M:%S.%f")
     time += datetime.timedelta(hours=1)
于 2013-11-06T00:30:57.120 に答える
3

あなたのデータ ソースには、実際には 0 から 24 までの時間が含まれているに違いありません。それを確認します。「一日の始まり」の真夜中と「一日の終わり」の真夜中を区別するのは「ばかげた考え」です。もしそうなら、@Amadanが言ったように、24は実際には翌日の00:00を意味します.

どのように対処するかは、データ ソースで日時がどのように表現されるかについての正確な(網羅的な) 詳細によって異なります。それを明確にするには、1 つの例では不十分です。それだけであれば、thestring.endswith(" 24")このケースをキャッチするにはチェックで十分です。そのような場合は、24 を破棄し、 に変換してからdatetime追加timedelta(days=1)します。

または、時間の範囲が 1 ~ 24 であることが確実な場合は、時間から 1 を引く必要があります。しかし、そのように機能するシステムを見たことがありません。

于 2013-11-06T00:33:59.590 に答える
0

私はおそらく次のような単純なものに行きます:

from datetime import datetime
import re

s = '2012/15/01 24'
y, d, m, h = map(int, re.findall('\d+', s))
dt = datetime(y, m, d, h - 1)
# 2012-01-15 23:00:00
于 2013-11-06T00:40:32.927 に答える