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

Kel*_*lly 5 python

我有一个数据源,其中包含我在 Python 中读取的日期时间。该程序总是在第 24 小时终止,因为 python 保存日期 0-23 而不是 1-24。

考虑到我得到一个像“2012/15/01 24”这样的字符串,处理这个问题的最佳方法是什么?

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

有没有更好的方法或更常见的方法来解决这个问题?

moe*_*nad 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)
Run Code Online (Sandbox Code Playgroud)


Tim*_*ers 3

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

如何处理它取决于数据源中日期时间表示方式的确切(详尽)细节。一个例子不足以说明这一点。如果这就是全部,那么检查thestring.endswith(" 24")就足以捕获这种情况。当您确实遇到这种情况时,请将 24 扔掉,转换为 a datetime,然后添加timedelta(days=1)到其中。

或者,如果您绝对确定时间范围是从 1 点到 24 点(含 1 点和 24 点),则必须从该小时数中减去 1。但我肯定从未见过这样工作的系统。