Python3: 将时间跨度转换为实际时间

Python3: converting timespan to actual time

According to GTFS specificationarrival_time 在 GTFS 中归档 stop_times.txt 文件的小时数可以超过 24。

For times occurring after midnight on the service day, enter the time as a value greater than 24:00:00 in HH:MM:SS local time for the day on which the trip schedule begins.

这些值旨在表示车辆在每个特定时间将进行的未来停靠。

我有一个 pandas 数据框,其中包含一列存储 arrival_time 值的列。我想要完成的是将那些大于 24 的值转换为实际的 24 小时时间戳,例如将 25:34:21 转换为 01:34:21.

首先,我尝试将 str.replace 与正则表达式一起使用,但它很快就变得混乱了。

df['arrival_time'].str.replace(r'\s(24)', '00', regex=True)
df['arrival_time'].str.replace(r'\s(25)', '01', regex=True)
df['arrival_time'].str.replace(r'\s(26)', '02', regex=True)
...
df['arrival_time'].str.replace(r'\s(31 )', '07', regex=True)
...

后来,我浏览了timedelta objects试图解决这个问题。这里出了问题的是 arrival_time 中的每个值可能会有所不同,具体取决于从服务器中提取这些值的时间。在早上,价值可能会上升到例如27,但在晚上更新时,值可能会超过 36。这使得指定日期跨度变得有点困难。

我不太确定应该去哪里解决我的问题。

原列:

%Y-%m-%d 13:44:01
%Y-%m-%d 13:56:23
%Y-%m-%d 17:59:02
%Y-%m-%d 24:21:45
%Y-%m-%d 26:15:14

期望状态:

%Y-%m-%d 13:44:01
%Y-%m-%d 13:56:23
%Y-%m-%d 17:59:02
%Y-%m-%d+1 00:21:45
%Y-%m-%d+1 02:15:14

检查前两位数是否大于24,然后去掉24,需要的时候加0。

times = [
    "24:00:00",
    "12:10:32",
    "26:35:34"]
results = []
for time in times:
    if int(time[0:2]) >= 24:
        new_time = str(int(time[0:2]) - 24)
        if len(new_time) == 1:
            new_time = "0" + new_time
        results.append(new_time + time[2:])
    else:
        results.append(time)

print(results)

输出:

['00:00:00', '12:10:32', '02:35:34']

这可能就是您要找的

provided_times = ["24:00:00", "12:10:32", "36:35:34"]
corrected_times = []

for time in provided_times:
    num_hour = eval(time[:2])
    count_days = '+1d ' if int(num_hour / 24) else '    '
    corrected_times.append(count_days + ('0' + str(num_hour % 24))[-2:] + time[2:])

print(corrected_times)

结果是

['+1d 00:00:00', '    12:10:32', '+1d 12:35:34']