Python日期时间差的计算(天/小时/分钟)及timedelta函数的使用(附python代码)

Posted 若芷兰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python日期时间差的计算(天/小时/分钟)及timedelta函数的使用(附python代码)相关的知识,希望对你有一定的参考价值。

背景描述

数据分析中会遇到日期、时间的计算,主要包括以下几种情况:

  1. 对2个日期进行时间差值的计算或与目标时长进行比较,如:计算天数(days)、小时数(hours)、分钟数(minutes),秒数(seconds)等
  2. 对已知日期进行转换,增加或减少天数(days)、小时数(hours)等,如计算昨天的日期,半年后的日期等
  3. 提取日期中的年份、月份和日子等信息
    本文主要针对问题1和问题2,关于问题3,请查看博文:“python提取年月日遇到的问题”(链接:添加链接描述

解决方法:

  1. 对2个日期进行时间差值的计算:
    将日期都转换为datetime类 --》2个日期直接进行运算(如加减)–》对计算差值进行天数(days)和秒数(seconds)的提取
  2. 对已知日期进行转换,如增加或减少(天/小时/分钟):使用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)

小结:

  1. 由于计算的时间差需要精确到小时/分钟/秒等,因此需要将日期类型转换为“datetime.datetime类型”后进行计算。
  2. 运算得到的时间差值,其类型为“datetime.timedelta”,包括2部分:days: 多少天,seconds: 多少秒。
  3. 时间差值的提取:天数(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

小结

  1. 在Dataframe中用同样的方法也能计算出两列日期时间的差值,包括天数和小时数,并且跨年度的计算也是可以的
  2. 日常工作中,可以使用提取出来的天数/小时数等与目标时长进行比较,建立效率评估指标(如:按时接收率%,商家正确揽收率%等)

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 分钟 [重复]

java计算两个日期相差多少天小时分钟等

SQL 计算时间差问题,要精确到天小时分钟.

Excel中有日期(一年365天)、时间(一天24小时)、风速、风向、温度、辐照等数据,现在我要计算

excel分钟及秒化为小时?

从日期算起多少天/小时/秒