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

日期函数

时间:2023-03-26 15:10:10 Python

DjangoNote25DatabaseFunction之日期函数主要介绍两类,Extract()和Trunc()Extract()的功能是提取日期,比如我们可以提取一个日期的年月field,day等数据的作用Trunc()是截取的,比如2022-06-1812:12:12,我们可以根据需求获取日期2020-06-18,或者更细粒度的到小时、分钟和秒。这次我们使用下面的模型:classExperiment(models.Model):start_datetime=models.DateTimeField()start_date=models.DateField(null=True,blank=True)start_time=models.TimeField(null=True,blank=True)end_datetime=models.DateTimeField(null=True,blank=True)end_date=models.DateField(null=True,blank=True)end_time=models.TimeField(null=True,blank=True)放在blog/models里面.py接下来,相关的迁移操作这里不再介绍。提取()截断()1。函数Extract()接受日期时间字段的名称,以及查询的年、月、日、时、分、秒等作为参数,并提取相应的值,并以整数形式返回。日期类型字段包括:DateTimeField、DateField、TimeField。提取出来的类型罗列如下:year—yearquarter—quartermonth—monthday—asomeweeksweekday—星期几,Sunday的值为1,Monday为2,untilSaturday为7hour-hourminute-minutesecond-second首先创建测试数据:fromdatetimeimportdatetimestart=datetime(2015,6,15,12,30,56)end=datetime(2015,7,2,17,21,43)fromblog.modelsimportExperimentExperiment.objects.create(start_datetime=start,start_date=start.date(),end_datetime=end,end_date=end.date())添加新字段以获取年份、周数、工作日和小时数从blog.modelsimportExperimentfromdjango.db.models.functionsimportExtractexperiment=Experiment.objects.annotate(start_year=Extract('start_datetime','year'),start_week=Extract('start_datetime','week'),start_week_day=Extract('start_datetime','week_day'),start_hour=Extract('start_datetime','hour')).get(id=1)print(experiment.start_year)print(experiment.start_week)print(实验。start_week_day)print(exprtiment.start_hour)搜索特定年份的数据Extract()函数的用法还可以用于搜索特定日期的项目,比如某年某月等。Experiment.objects.filter(start_datetime__year=Extract('end_datetime','year'))具体到某个日期项的用法,Extract()函数的用法是前面介绍过,接收字段名和日期项,Django还提供了另一种比Extract()函数更方便的方法,比如我们需要搜索年份,可以直接使用函数ExtractYear()来搜索月,使用函数ExtractMonth(),等等。上面我们可以接收到的每一个参数都有其对应的作用,参数作为需要处理的字段传递。下面是一个使用示例:fromblog.modelsimportExperimentfromdjango.db.models.functionsimportExtractYear,ExtractWeekexpriment=Experiment。objects.annotate(start_year=ExtractYear('start_datetime'),start_week=ExtractWeek('start_datetime')).get(id=1)print(expriment.start_year)print(expriment.start_week)如果是周数,小时,分钟,第二个操作,函数名可以用上面的英文年月日代替第二个接受三个参数:expression:字段,可以是DateField,DateTimeField,TimeField等kind:准确程度,可以是年,日,季等。output_field:输出格式,可以根据kind的值设置最小值,如果不传这个参数,默认是expression的值假设一个日期时间是2022-05-1612:34:56,我们可以一一处理:#Createdatafromdatetimeimportdatetimestart_datetime=datetime(year=2022,month=5,day=16,hour=12,minute=34,second=56)Experiment.objects.create(start_datetime=start_datetime)fromdjango.db.models.functionsimportTruncfromdjango.dbimportmodelsexperiment=Experiment。objects.annotate(start_year=Trunc('start_datetime','year',output_field=models.DateField()),start_quarter=Trunc('start_datetime','quarter',output_field=models.DateField()),start_month=Trunc('start_datetime','month',output_field=models.DateField()),start_day=Trunc('start_datetime','day',output_field=models.DateField()),start_hour=Trunc('start_datetime','hour',output_field=models.DateTimeField()),start_minute=Trunc('start_datetime','minute',output_field=models.DateTimeField()),start_second=Trunc('start_datetime','second',output_field=models.DateTimeField()),).get(id=2)然后按下一个print()他们的结果如下:>>>print(experiment.start_year)2022-01-01>>>print(experiment.start_quarter)2022-04-01>>>print(experiment.start_month)2022-05-01>>>print(实验.start_day)2022-05-16>>>打印(experiment.start_hour)2022-05-1612:00:00+00:00>>>打印(experiment.start_minute)2022-05-1612:34:00+00:00>>>打印(实验.start_second)2022-05-1612:34:56+00:00需要注意的是截取了年月季的数据,因为不关注当前时间尺度下的数据,所以date的天会被设置为1,time会从输出的结果中,日期和时间精确到我们设置的精细度,那么我们就可以利用这个来对年、月、季、日等一些数据进行统计。接下来以每天的数据为例,我们来做一些统计,统计每天的数据条数:fromdjango.db.modelsimportCountExperiment.objects.annotate(start_day=Trunc("start_datetime","day",output_field=models.DateField())).values("start_day").annotate(count_day=Count("id"))类似于Extract()函数。Trunc()函数还有一些可以直接操作时间的函数,如TruncYear()、TruncMonth()等,这里不再介绍。以上就是本篇笔记的全部内容,下一篇将介绍数据库函数中与计算公式相关的函数。