解析日期时间为1-24而不是0-23

时间:2013-11-06 00:25:08

标签: python

我有一个数据源,其中包含我正在阅读Python的日期时间。该程序总是在第24小时死亡,因为python持有0-23而不是1-24。

考虑到我得到的字符串如'2012/15/01 24',处理此问题的最佳方式是什么?

我可以使用正则表达式将日期转换为日期时间,然后再次使用正则表达式来获取小时,转换为int,减去一小时然后将小时数添加到日期时间,但这似乎是痛苦。

有更好的方法,或更常见的方法吗?

3 个答案:

答案 0 :(得分:4)

不是我的,但它会完成这项工作。

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)

答案 1 :(得分:2)

我敢打赌你的数据源实际上有从0到24的小时数。检查一下。区分“一天开始”的午夜和“一天结束”的午夜是一种“愚蠢的想法”。如果是这样,那么正如@Amadan所说,24真的意味着下一个日00:00。

如何处理它取决于完全(详尽无遗)详细说明日期时间在数据源中的表示方式。一个例子不足以指出这一点。如果这就是全部,那么检查thestring.endswith(" 24")就足以捕捉到这种情况。当你遇到这种情况时,抛弃24,转换为datetime,然后将timedelta(days=1)添加到其中。

或者,如果您完全确定小时范围从1到24(包括1和24),则必须从小时中减去一小时。但我当然从未见过一个以这种方式运作的系统。

答案 2 :(得分: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