如何将特定格式的时间范围字符串转换为datetime64[ns]类型的起止时间列表
如何将特定格式的时间范围字符串转换为datetime64[ns]类型的起止时间列表
这个需求我之前也碰到过,其实拆分几个步骤就能轻松搞定,咱们一步步来解决你提到的三个问题:
第一步:拆分时间范围字符串
你观察得没错,首先得把包含起止时间的长字符串拆成两个独立的时间字符串。因为你的格式里是用空格-空格分隔的,直接用split(' - ')就能拆分,比如:
time_range = 'Mar 24, 2019 12:45 AM - Apr 25, 2019 12:44 AM' start_str, end_str = time_range.split(' - ') # 得到 start_str = 'Mar 24, 2019 12:45 AM',end_str = 'Apr 25, 2019 12:44 AM'
第二步:解析单个时间字符串
针对你提到的「月份是三个字母」「12小时制时间」这两个问题,Python的datetime模块或者pandas都能完美处理:
- 用
%b匹配三个字母的英文月份缩写(比如Mar对应3月) - 用
%I处理12小时制的小时数(01-12) - 用
%p识别AM/PM标识
这里推荐用pandas的to_datetime方法,它会直接返回datetime64[ns]类型的Timestamp对象,非常方便:
import pandas as pd dt_format = '%b %d, %Y %I:%M %p' start_dt = pd.to_datetime(start_str, format=dt_format) end_dt = pd.to_datetime(end_str, format=dt_format)
如果不用pandas,用原生datetime加numpy也可以:
from datetime import datetime import numpy as np start_datetime = datetime.strptime(start_str, dt_format) end_datetime = datetime.strptime(end_str, dt_format) # 转换为datetime64[ns] start_dt64 = np.datetime64(start_datetime) end_dt64 = np.datetime64(end_datetime)
第三步:封装成函数批量处理
把上面的逻辑封装成函数,就能批量处理所有时间范围字符串了:
import pandas as pd def convert_time_range(time_range_str): start_str, end_str = time_range_str.split(' - ') dt_format = '%b %d, %Y %I:%M %p' start_dt = pd.to_datetime(start_str, format=dt_format) end_dt = pd.to_datetime(end_str, format=dt_format) return [start_dt, end_dt] # 测试单个例子 test_range = 'Mar 24, 2019 12:45 AM - Apr 25, 2019 12:44 AM' print(convert_time_range(test_range)) # 输出:[Timestamp('2019-03-24 00:45:00'), Timestamp('2019-04-25 00:44:00')] # 批量处理多个时间范围 time_ranges_list = [ 'Mar 24, 2019 12:45 AM - Apr 25, 2019 12:44 AM', 'Jan 01, 2020 09:30 PM - Jan 02, 2020 08:15 AM', 'Jun 15, 2021 12:00 PM - Jun 15, 2021 12:00 AM' ] all_results = [convert_time_range(tr) for tr in time_ranges_list]
需要注意的是,12:00 AM会被正确解析为当天的0点,12:00 PM会被解析为当天的12点,完全符合时间逻辑。
备注:内容来源于stack exchange,提问作者mathim1881
相关产品推荐
相关产品推荐

