当前位置: 首页 > 后端技术 > Python

Python日期转换与计算

时间:2023-03-26 14:20:42 Python

日期转换与计算对于日期,有时需要进行不同时间单位之间的转换,或者接受字符串格式的日期,转换为datetime对象。有时需要计算日期范围,以及一周中特定日期的日期。这里用的比较多的是Python提供的datetime模块。datetime模块中日期时间的简单转换在datetime模块中,可以通过创建一个timedelta对象来表示一个时间段。下面的例子:>>>fromdatetimeimporttimedelta>>>a=timedelta(days=2,hours=6)>>>b=timedelta(hours=4.5)>>>c=a+b>>>cdatetime。timedelta(2,37800)>>>c.days2>>>c.seconds37800>>>c.seconds/360010.5>>>c.total_seconds()/360058.5如果要表示指定日期和时间,需要先创建日期时间对象,然后使用标准数学运算执行。示例如下:>>>fromdatetimeimportdatetime>>>a=datetime(2020,1,15)>>>print(a+timedelta(days=10))2020-01-2500:00:00>>>b=datetime(2020,2,3)>>>d=b-a>>>ddatetime.timedelta(19)>>>d.days19>>>now=datetime.today()>>>打印(now)2020-01-1510:59:10.230995>>>print(now+timedelta(minutes=10))2020-01-1511:09:10.230995datetime对象可以自己处理闰年问题,以下示例:>>>a=datetime(2020,3,1)>>>b=datetime(2020,2,28)>>>a-bdatetime.timedelta(2)>>>(a-b)。days2>>>c=datetime(2019,3,1)>>>d=datetime(2019,2,28)>>>c-ddatetime.timedelta(1)>>>(c-d).days1字符串和编写程序时的日期转换当接受以字符串格式表示的日期输入时,需要计算将此类字符串转换为日期时间对象。在datetime对象中使用strptime()方法,如下:>>>fromdatetimeimportdatetime>>>text='2020-01-15'>>>y=datetime.strptime(text,'%Y-%m-%d')>>>ydatetime.datetime(2020,1,15,0,0)>>>z=datetime.now()>>>zdatetime.datetime(2020,1,15,11,10,11,71792)>>>diff=z-y>>>diffdatetime.timedelta(0,40211,71792)上面的意思%Y是年份用十进制的世纪,%m是月份用十进制补零,%d是以零填充的十进制表示的月份中的第几天。下面是几个格式化代码。例如:指令含义%a当地工作日的缩写%A当地工作日的全称%b当地月份的缩写%B当地月份的全称%H补零后的十进制小时数(24小时制)%I零padding十进制小时(12小时制)%M补零后的十进制分钟%S补零后的秒将日期格式化为易于阅读的英文形式,如下所示:>>>zdatetime。datetime(2020,1,15,11,10,11,71792)>>>format_z=datetime.strftime(z,"%A%B%d,%Y")>>>format_z'2020年1月15日星期三'datetime.strftime()函数返回一个字符串,表示显示格式字符串指定的日期。格式化指令,如上面代码中的“%A%B%d,%Y”。该函数的第一个参数是一个日期时间对象。这里需要注意的是strptime的性能比较差。如果明确的需求是解析大量已知格式的日期字符串,可以考虑自己实现一套解析方案。假设格式为YYYY-MM-DD,解析函数可以用如下代码实现:fromdatetimeimportdatetimedefparse_ymd(s):year_s,mon_s,day_s=s.split('-')returndatetime(int(year_s),int(mon_s),int(day_s))两者达到的效果:In[1]:fromdatetimeimportdatetime...:defparse_ymd(s):...:year_s,mon_s,day_s=s.split('-')...:returndatetime(int(year_s),int(mon_s),int(day_s))In[2]:text="2020-01-15"In[3]:%timeitdatetime.strptime(text,'%Y-%m-%d')7.75μs±31nsperloop(mean±std.dev.of7runs,100000loopseach)In[4]:%timeitparse_ymd(text)每个循环1.05μs±3.07ns(7次运行的平均值±std.dev,每次1000000次循环)可以看出parse_ymd()函数比datetime.strptime()快7倍以上。如果设计日期处理量大,格式固定,可以考虑这种方案。计算某月的日期范围Python提供的calendar模块提供了与日历相关的函数。可以考虑配合datetime模块实现需求:#!/usr/bin/envpython#-*-coding:utf-8-*-'''@File:datetime_calendar.py@Time:2020/01/1512:46:58@作者:大梦三千年@联系方式:yiluolion@126.com'''#把importlib放在这里fromdatetimeimportdate,timedeltaimportcalendardefget_month_range(start_date=None):'''获取月份范围args:start_date:开始日期,默认为Noneofthemonthstart_date=date.today().replace(day=1)#获取当月的天数_,days_in_month=calendar.monthrange(start_date.year,start_date.month)#计算结束日期end_date=start_date+timedelta(days=days_in_month)#返回开始日期和结束日期的元组return(start_date,end_date)在交互式解释器中使用如下:In[1]:fromdatetimeimporttimedeltaIn[2]:fromdatetime_calendarimportget_month_rangeIn[3]:a_day=timedelta(days=1)In[4]:first_day,last_day=get_month_range()In[5]:whilefirst_day

最新推荐
猜你喜欢