如何用Python生成按月逐小时的指定格式时间序列数组?
嘿,这个需求用Python的标准库就能轻松实现,循环的思路也很直观。我给你一步步拆解,再附上可运行的代码:
实现思路
核心就是利用datetime模块来处理时间的增减和格式化,循环逻辑非常简单:从起始时间开始,每一步加1小时,直到达到结束时间为止,每一步都把时间转成你要的格式存入数组。
完整代码示例
from datetime import datetime, timedelta # 1. 定义起始和结束时间(这里用你给出的示例范围) # 用strptime把字符串转成datetime对象,注意格式符要和输入字符串对应 start_time = datetime.strptime('2013/05/23;01:00:00:000', '%Y/%m/%d;%H:%M:%S:%f') end_time = datetime.strptime('2013/06/23;01:00:00:000', '%Y/%m/%d;%H:%M:%S:%f') # 2. 初始化存储时间序列的数组 time_series = [] current_time = start_time # 3. 循环生成逐小时时间点 while current_time <= end_time: # 把datetime对象格式化成你要的字符串格式 # %f会输出6位毫秒,我们只需要前3位,所以用[:-3]切掉最后三位 formatted_time = current_time.strftime('%Y/%m/%d;%H:%M:%S:%f')[:-3] time_series.append(formatted_time) # 每次给当前时间加1小时 current_time += timedelta(hours=1) # 可选:验证结果,打印前5个和后5个时间点 print("前5个时间点:") for t in time_series[:5]: print(t) print("\n后5个时间点:") for t in time_series[-5:]: print(t)
关键细节说明
- 时间格式化:
strftime里的%f对应6位毫秒,而你需要的是3位,所以用切片[:-3]去掉最后三位,刚好得到000这样的格式。 - 动态计算结束时间:如果不想手动写结束时间,想自动生成“起始时间往后一个月”的时间,可以用
python-dateutil库的relativedelta(需要先pip install python-dateutil),替换结束时间的定义:
这样不管起始月份是28天、30天还是31天,都能准确得到下一个月的同一时间点,不用手动算天数。from dateutil.relativedelta import relativedelta end_time = start_time + relativedelta(months=1) - 循环终止条件:用
current_time <= end_time确保结束时间也会被包含在数组里,完全符合你示例里的范围要求。
运行这段代码后,time_series数组里就会存满所有逐小时的时间字符串,完美匹配你的需求~
内容的提问来源于stack exchange,提问作者Jellyse
相关产品推荐
相关产品推荐

