Python中strptime解析时间后小时丢失的解决方法咨询
问题描述
我的train_time列表包含如下格式的时间字符串:
train_time = [ "01/01/2021 00:00", "01/01/2021 01:00", "01/01/2021 02:00", "01/01/2021 03:00", "01/01/2021 04:00", "01/01/2021 05:00", "01/01/2021 06:00", "01/01/2021 07:00", "01/01/2021 08:00" ]
我用以下代码处理后:
# train_time = [dt.datetime.strptime(date, "%d/%m/%Y %H:%M").date() for date in train_time ]
输出的train_time只显示日期,小时信息丢失:
the output train_time [datetime.date(2021, 1, 1), datetime.date(2021, 1, 1), datetime.date(2021, 1, 1), datetime.date(2021, 1, 1), datetime.date(2021, 1, 1), datetime.date(2021, 1, 1), datetime.date(2021, 1, 1), datetime.date(2021, 1, 1), datetime.date(2021, 1, 1), datetime.date(2021, 1, 1), datetime.date(2021, 1, 2), datetime.date(2021, 1, 2), datetime.date(2021, 1, 2), ]
请问如何保留实际小时信息,有哪些正确的格式处理方案?
解决方案
问题核心是你调用了.date()方法,这个方法会直接丢弃时间部分,只返回日期对象。想要保留小时信息,有以下几种可行方案:
方案1:保留完整datetime对象
直接去掉.date(),得到包含日期和时间的datetime.datetime对象:
import datetime as dt train_time = [dt.datetime.strptime(date, "%d/%m/%Y %H:%M") for date in train_time]
处理后每个元素都是datetime.datetime类型,比如datetime.datetime(2021, 1, 1, 0, 0),小时、分钟信息会完整保留。
方案2:转换为自定义格式的时间字符串
如果需要将时间转为特定格式的字符串而非datetime对象,可以用.strftime()自定义输出格式:
import datetime as dt # 保留原格式的字符串 train_time = [dt.datetime.strptime(date, "%d/%m/%Y %H:%M").strftime("%d/%m/%Y %H:%M") for date in train_time] # 或者转为其他格式,比如"YYYY-MM-DD HH:MM" train_time = [dt.datetime.strptime(date, "%d/%m/%Y %H:%M").strftime("%Y-%m-%d %H:%M") for date in train_time]
方案3:用pandas批量处理(适合大数据量)
如果数据量较大,使用pandas的to_datetime方法更高效,默认会保留完整时间信息:
import pandas as pd train_time = pd.to_datetime(train_time, format="%d/%m/%Y %H:%M") # 若要转为列表形式的datetime对象 train_time = train_time.to_list()
内容的提问来源于stack exchange,提问作者Naj_m_Om
相关产品推荐
相关产品推荐

