常用的时间、日期处理

生成间隔时序list

备用

import datetime

def dateRange(start, end, step=1, inputFormat="%Y-%m-%d", outputFormat="%Y%m%d"):
"""
startDate:开始时间,字符串类型,默认yyyy-MM-dd
endDate:结束时间,字符串类型,默认yyyy-MM-dd
format:返回的日期字符串格式,可以指定
"""
# strptime字符串转时间
# strftime时间转字符串
strptime, strftime = datetime.datetime.strptime, datetime.datetime.strftime
days = (strptime(end, inputFormat) - strptime(start, inputFormat)).days
return [strftime(strptime(start, inputFormat) + datetime.timedelta(i), outputFormat) for i in
range(0, days + 1, step)]
dateRange(start="2020-01-01",end="2020-01-21",step=3)
['20200101',
'20200104',
'20200107',
'20200110',
'20200113',
'20200116',
'20200119']

上面的函数是第一个版本,只提供间隔为天的序列生成函数

通用函数封装

import pandas as pd
def timeRange(starttime, endtime, step="15Min", inputFormat='%Y%m%d%H%M', outputFormat='%Y%m%d%H%M'):
"""
输入起止时间,返回指定间隔的时间序列
:param starttime: 开始时刻
:param endtime: 截止时刻
:param step: 步长,pands的参数,"Y"-年,"M"-月,"D"-天,"H"-小时,"Min"-分钟
:param inputFormat:输入时间格式
:param outputFormat: 输出时间格式
:return:
"""
strptime, strftime = datetime.datetime.strptime, datetime.datetime.strftime
# 转换数据类型
start_slice_p = strptime(starttime, inputFormat)
end_slice_p = strptime(endtime, inputFormat)
# 使用pandas提供的date_range函数生成间隔序列,并且转换成指定输出格式
return [x.strftime(outputFormat) for x in pd.date_range(start_slice_p, end_slice_p, freq=step)]

年间隔

timeRange("202001010000", "202501010000", step="1Y")
['202012310000',
'202112310000',
'202212310000',
'202312310000',
'202412310000']

月间隔

timeRange(starttime="2020-01-01 00:00:15",
endtime="2020-05-01 00:00:15",
step="1M",
inputFormat='%Y-%m-%d %H:%M:%S',
outputFormat='%Y-%m-%d %H:%M:%S')
['2020-01-31 00:00:15',
'2020-02-29 00:00:15',
'2020-03-31 00:00:15',
'2020-04-30 00:00:15']

小时间隔

timeRange(starttime="2020-01-01 00:00:15",
endtime="2020-01-01 12:00:15",
step="1H",
inputFormat='%Y-%m-%d %H:%M:%S',
outputFormat='%Y-%m-%d %H:%M:%S')
['2020-01-01 00:00:15',
'2020-01-01 01:00:15',
'2020-01-01 02:00:15',
'2020-01-01 03:00:15',
'2020-01-01 04:00:15',
'2020-01-01 05:00:15',
'2020-01-01 06:00:15',
'2020-01-01 07:00:15',
'2020-01-01 08:00:15',
'2020-01-01 09:00:15',
'2020-01-01 10:00:15',
'2020-01-01 11:00:15',
'2020-01-01 12:00:15']

分钟间隔

timeRange(starttime="2020-01-01 09:15:15",
endtime="2020-01-01 11:15:14",
step="15Min",
inputFormat='%Y-%m-%d %H:%M:%S',
outputFormat='%Y-%m-%d %H:%M:%S')
['2020-01-01 09:15:15',
'2020-01-01 09:30:15',
'2020-01-01 09:45:15',
'2020-01-01 10:00:15',
'2020-01-01 10:15:15',
'2020-01-01 10:30:15',
'2020-01-01 10:45:15',
'2020-01-01 11:00:15']

秒间隔

timeRange(starttime="2020-01-01 09:15:15",
endtime="2020-01-01 09:18:14",
step="30S",
inputFormat='%Y-%m-%d %H:%M:%S',
outputFormat='%Y-%m-%d %H:%M:%S')
['2020-01-01 09:15:15',
'2020-01-01 09:15:45',
'2020-01-01 09:16:15',
'2020-01-01 09:16:45',
'2020-01-01 09:17:15',
'2020-01-01 09:17:45']

基本调用逻辑都是一样的,如果需要对函数做修改,可以参看​​pd.date_range​​的help