Python将GTFS time转换为datetim

2024-05-18 05:14:05 发布

您现在位置:Python中文网/ 问答频道 /正文

由于时间表周期的原因,GTFS时间通常超过23:59:59。例如,最后一个时间可能是25:20:00(第二天的01:20:00),因此当您将时间转换为datetime时,遇到这些时间时将出现错误。你知道吗

有没有一种方法可以将GTFS时间值转换为标准的datetime格式,而不必将小时拆分出来,然后再转换回正确格式的字符串,然后将其转换为datetime。你知道吗

t = ['24:22:00', '24:30:00', '25:40:00', '26:27:00']
'0'+str(pd.to_numeric(t[0].split(':')[0])%24)+':'+':'.join(t[0].split(':')[1:])

对于上面的例子,我只想看看

['00:22:00', '00:30:00', '01:40:00', '02:27:00']

Tags: to方法字符串标准datetime格式错误时间
2条回答

我没有找到一个简单的方法,所以我只写了一个函数来实现它。你知道吗

如果其他人想要解决方案,我的:

from datetime import timedelta
import pandas as pd

def list_to_real_datetime(time_list, date_exists=False):
    '''
    Convert a list of GTFS times to real datetime list

    :param time_list: GTFS times
    :param date_exists: Flag indicating if the date exists in the list elements
    :return: An adjusted list of time to conform with real date times
    '''

    # new list of times to be returned
    new_time = []

    for time in time_list:

        plus_day = False
        hour = int(time[0:2])

        if hour >= 24:
            hour -= 24
            plus_day = True

        # reset the time to a real format
        time = '{:02d}'.format(hour)+time[2:]

        # Convert the time to a datetime
        if not date_exists:
            time = pd.to_datetime('1970-01-01 '+time, format='%Y-%m-%d')

        if plus_day:
            time = time + timedelta(days=1)

        new_time.append(time)

    return new_time
from datetime import datetime, timedelta

def gtfs_time_to_datetime(gtfs_date, gtfs_time):
    hours, minutes, seconds = tuple(
        int(token) for token in gtfs_time.split(":")
    )
    return (
        datetime.strptime(gtfs_date, "%Y%m%d") + timedelta(
           hours=hours, minutes=minutes, seconds=seconds
        )
    )

给出以下结果

>>> gtfs_time_to_datetime("20191031", "24:22:00")
datetime.datetime(2019, 11, 1, 0, 22)
>>> gtfs_time_to_datetime("20191031", "24:22:00").time().isoformat()
'00:22:00'

>>> t = ['24:22:00', '24:30:00', '25:40:00', '26:27:00']
>>> [ gtfs_time_to_datetime("20191031", tt).time().isoformat() for tt in t]
['00:22:00', '00:30:00', '01:40:00', '02:27:00']

相关问题 更多 >