我有一个数据源,其中包含我正在用 Python 阅读的日期时间。该程序总是在第 24 小时终止,因为 python 保存日期 0-23 而不是 1-24。
考虑到我得到一个像'2012/15/01 24'这样的字符串,处理这个问题的最佳方法是什么?
我可以使用正则表达式来提取日期,将其转换为日期时间,然后再次使用正则表达式来获取小时,转换为 int,减去一个小时,然后将小时添加到日期时间,但这似乎很痛苦。
有没有更好的方法或更常见的方法?
我有一个数据源,其中包含我正在用 Python 阅读的日期时间。该程序总是在第 24 小时终止,因为 python 保存日期 0-23 而不是 1-24。
考虑到我得到一个像'2012/15/01 24'这样的字符串,处理这个问题的最佳方法是什么?
我可以使用正则表达式来提取日期,将其转换为日期时间,然后再次使用正则表达式来获取小时,转换为 int,减去一个小时,然后将小时添加到日期时间,但这似乎很痛苦。
有没有更好的方法或更常见的方法?
不是我的,但它会完成这项工作。
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)
我敢打赌,您的数据源实际上有从 0 到 24 的小时数。检查那个。区分“一天开始时”的午夜和“一天结束时”的午夜是一个“愚蠢的想法”。如果是这样,那么正如@Amadan 所说,24 真的意味着第二天00:00 。
如何处理它取决于日期时间在数据源中如何表示的确切(详尽)细节。一个例子不足以说明这一点。如果仅此而已,那么检查thestring.endswith(" 24")
就足以抓住这种情况。当您确实遇到这种情况时,请将 24 扔掉,转换为 a datetime
,然后添加timedelta(days=1)
到它。
或者,如果您完全确定小时的范围是从 1 到 24(含),则必须从小时中减去 1。但我当然从未见过以这种方式工作的系统。
我可能会选择一些简单的东西,比如:
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