Python日期时间差的计算(天/小时/分钟)及timedelta函数的使用(附python代码)
Posted 若芷兰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python日期时间差的计算(天/小时/分钟)及timedelta函数的使用(附python代码)相关的知识,希望对你有一定的参考价值。
背景描述
数据分析中会遇到日期、时间的计算,主要包括以下几种情况:
- 对2个日期进行时间差值的计算或与目标时长进行比较,如:计算天数(days)、小时数(hours)、分钟数(minutes),秒数(seconds)等
- 对已知日期进行转换,增加或减少天数(days)、小时数(hours)等,如计算昨天的日期,半年后的日期等
- 提取日期中的年份、月份和日子等信息
本文主要针对问题1和问题2,关于问题3,请查看博文:“python提取年月日遇到的问题”(链接:添加链接描述)
解决方法:
- 对2个日期进行时间差值的计算:
将日期都转换为datetime类 --》2个日期直接进行运算(如加减)–》对计算差值进行天数(days)和秒数(seconds)的提取 - 对已知日期进行转换,如增加或减少(天/小时/分钟):使用timedelta()函数来解决
示例代码(Python):
1. 对2个日期进行时间差值的计算
1.1 对直接输入的日期进行时间差计算
import numpy as np
import pandas as pd
from datetime import *
# 输入2个日期
date1 = "2022.05.11 13:30:00"
date2 = "2022.05.10 12:00:00"
# 将输入的日期转换为“datetime.datetime”类型
# 由于日期的类型是字符串,因此不能直接进行计算,会报错
date1 = datetime.strptime(date1, "%Y.%m.%d %H:%M:%S")
date2 = datetime.strptime(date2, "%Y.%m.%d %H:%M:%S")
print(" date1:", date1, "\\n" ,"date2:", date2)
print(" 2个日期的类型分别是:\\n", type(date1), type(date2))
# 计算时间差:时间差的类型为“datetime.timedelta”类型
duration = date1 - date2
duration
# 对计算差值进行天数(days)和秒数(seconds)的提取,并将秒数转换为小时数
day = duration.days
hour = duration.seconds/3600
print("days:", day)
print("hours:", hour)
小结:
- 由于计算的时间差需要精确到小时/分钟/秒等,因此需要将日期类型转换为“datetime.datetime类型”后进行计算。
- 运算得到的时间差值,其类型为“datetime.timedelta”,包括2部分:days: 多少天,seconds: 多少秒。
- 时间差值的提取:天数(days)= durations.days; 秒数(seconds)= durations.seconds,
可根据提取出来的秒数再换算为多少小时或多少分钟。
1.2 DataFrame的时间差计算
import pandas as pd
from datetime import *
# 建立计算时间差的数据表(Dataframe)
li = [["2021-05-6 10:00:00", "2022-05-10 08:30:00"],
["2022-05-7 08:30:00", "2022-05-10 12:30:00"],
["2022-05-9 12:00:00", "2022-05-10 14:30:00"]]
df = pd.DataFrame(li, columns=["date1", "date2"])
# 将数据数据转换为“datetime.datetime类型”
df.date1 = df.date1.map(lambda x: datetime.strptime(x, "%Y-%m-%d %H:%M:%S"))
df.date2 = df.date2.map(lambda x: datetime.strptime(x, "%Y-%m-%d %H:%M:%S"))
df
# 计算时间差
df["duration"] = df.date2 - df.date1
# 对计算差值进行天数(days)和秒数(seconds)的提取,并将秒数转换为小时数
df["day"] = df.duration.map(lambda x: x.days)
df["hour"] = df.duration.map(lambda x: x.seconds/3600)
df
小结
- 在Dataframe中用同样的方法也能计算出两列日期时间的差值,包括天数和小时数,并且跨年度的计算也是可以的
- 日常工作中,可以使用提取出来的天数/小时数等与目标时长进行比较,建立效率评估指标(如:按时接收率%,商家正确揽收率%等)
2. 对已知日期进行增减计算(天/小时/分钟):使用timedelta()函数来解决
2.1 timedelta()函数的简介
timedelta()函数的构造:
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
对参数设定具体的值,达到计算的要求,如:
设定:days=1 – 在原有时间上增加1天;
设定:minutes=-30 – 在原有时间上减少30分钟
2.2 timedelta()函数的使用
# 1. timedelta()的基本用法
dt1 = datetime(2022, 5, 12, 8, 30, 0)
dt2 = dt1 + timedelta(days = 1)
dt3 = dt1 + timedelta(minutes = -30)
print("dt1:", dt1)
print("dt2:", dt2)
print("dt3:", dt3)
# 2. timedelta在dataframe中使用是,有广播的作用
li = [["2022-05-6 10:00:00", "2022-05-10 08:30:00"],
["2022-05-7 08:30:00", "2022-05-10 12:30:00"],
["2022-05-9 12:00:00", "2022-05-10 14:30:00"]]
df = pd.DataFrame(li, columns=["date1", "date2"])
df.date1 = df.date1.map(lambda x: datetime.strptime(x, "%Y-%m-%d %H:%M:%S"))
df.date2 = df.date2.map(lambda x: datetime.strptime(x, "%Y-%m-%d %H:%M:%S"))
df["var1"] = df.date1 + timedelta(hours=1)
df["var2"] = df.date2 + timedelta(days=30)
df
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
计算年、月、日需要安装组件包
pip install python-dateutil
当前日期时间 import datetime print datetime.datetime.now() # 2018-05-08 16:53:30.101000 格式化时间 import datetime print datetime.datetime.now().strftime("%Y-%m-%d %H:%M") # 2018-05-08 16:54 多加一天 import datetime print (datetime.datetime.now()+datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S") # 2018-05-09 16:56:07 减一天 import datetime print (datetime.datetime.now()+datetime.timedelta(days=-1)).strftime("%Y-%m-%d %H:%M:%S") # 2018-05-07 16:56:59 可以把days改为hours minutes,就可以提前XX小时/分钟了。 timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]]) 减去一年 import datetime from dateutil.relativedelta import relativedelta d = datetime.datetime.strptime(‘20180131‘, ‘%Y%m%d‘) print(d) // 2018-01-31 00:00:00 print((d - relativedelta(years=1)).strftime(‘%Y%m%d‘)) // 20170131
以上是关于Python日期时间差的计算(天/小时/分钟)及timedelta函数的使用(附python代码)的主要内容,如果未能解决你的问题,请参考以下文章
如何获得两个日期的时差,例如 x 天 y 小时 z 秒 t 分钟 [重复]