【问题标题】:Python3: converting timespan to actual timePython3:将时间跨度转换为实际时间
【发布时间】:2022-01-24 21:49:42
【问题描述】:

GTFS stop_times.txt 文件中的According to GTFS specificationarrival_time 的小时数可能大于 24。

对于服务日午夜之后发生的时间,请输入时间 作为大于 24:00:00 的 HH:MM:SS 本地时间当天的值 旅行计划的开始。

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

我有一个由一堆列组成的 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

【问题讨论】:

    标签: python python-datetime


    【解决方案1】:

    这可能就是你要找的东西

    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']
    

    【讨论】:

    • 谢谢!最后我不得不调整一些东西,但它就像一个魅力
    【解决方案2】:

    检查前两位数是否大于 24,然后只需从中删除 24 并在需要时添加零。

    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']
    

    【讨论】:

    • 感谢您的帮助!我希望我有足够的声誉,所以我可以支持你的解决方案。
    猜你喜欢
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 2021-04-19
    • 1970-01-01
    • 2011-07-29
    • 2014-12-04
    相关资源
    最近更新 更多