@创建于:20211117

文章目录

  • 1、背景
  • 2、代码示例
    • 2.1 代码
    • 2.1 输出结果
  • 3、结果讨论

1、背景

经常遇到两个日期之间相差多个年,多少月,多少日。

方式1:使用datetime
datetime只能计算日期间隔了多少天,换成年,需要除以常数365.25;换成月则需要除以30.42。这样计算不太准确。

方式2:使用np.timedelta64()函数

方式3:使用dateutil的relativedelta
dateutil则可以计算日期间隔了几年几月几日,是一种比较准确的方法。

2、代码示例

2.1 代码

"""文件说明:日期时间,做差,算日期相差几年几月几日"""
import numpy as np
import pandas as pd
from datetime import datetime
from dateutil.relativedelta import relativedelta# 显示所有列
pd.set_option('display.max_columns', None)def year_month_day():# today = datetime.today()today = datetime(2021, 4, 3)someday = datetime(2021, 2, 1)print("today is {}, someday is {}".format(today, someday))delta = relativedelta(dt1=today, dt2=someday)years = delta.yearsmonths = delta.monthsdays = delta.daysprint('Time delta is {}'.format(delta))print('years={}, months={}, days={}'.format(years, months, days))def df_year_month_day():t1 = ['2017-01-01', '2017-01-01', '2017-02-03']t2 = ['2018-12-31', '2019-01-01', '2021-01-31']df = pd.DataFrame(np.array([t1, t2]).T, columns=['a', 'b'])print("原始数据:\n", df)df = df.astype('datetime64')df['c'] = df.apply(lambda x: relativedelta(x['b'], x['a']), axis=1)df['cy'] = df['c'].apply(lambda x: x.years)df['cm'] = df['c'].apply(lambda x: x.months)df['cd'] = df['c'].apply(lambda x: x.days)df['np_y'] = pd.to_datetime(df['b']) - pd.to_datetime(df['a'])df['np_y'] = df['np_y'].map(lambda x: x / np.timedelta64(1, 'Y'))print("计算两列日期差别:\n", df)if __name__=="__main__":year_month_day()print('\n')df_year_month_day()

2.1 输出结果

today is 2021-04-03 00:00:00, someday is 2021-02-01 00:00:00
Time delta is relativedelta(months=+2, days=+2)
years=0, months=2, days=2原始数据:a           b
0  2017-01-01  2018-12-31
1  2017-01-01  2019-01-01
2  2017-02-03  2021-01-31
计算两列日期差别:a          b                                              c  cy  \
0 2017-01-01 2018-12-31  relativedelta(years=+1, months=+11, days=+30)   1
1 2017-01-01 2019-01-01                        relativedelta(years=+2)   2
2 2017-02-03 2021-01-31  relativedelta(years=+3, months=+11, days=+28)   3   cm  cd      np_y
0  11  30  1.995934
1   0   0  1.998672
2  11  28  3.991868

3、结果讨论

在结果中可以看到,dateutil的relativedelta 比 np.timedelta64()更合理。

计算两个日期相差 几年几个月几日相关推荐

  1. 计算两个日期相差几年几个月

    public static class dateTimeDiff {     /// <summary>     /// 计算日期间隔     /// </summary>   ...

  2. 计算两个日期相差的小时差

    计算出:两个日期之间的相差天数,乘小时数 <%@ page language="java" import="java.util.*" pageEncodi ...

  3. 计算两个日期相差的天数

    JavaBean类 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calen ...

  4. java计算两个日期相差月数

    1.计算两个日期相差月数,不满一月按一月算 import java.text.ParseException; import java.text.SimpleDateFormat; import jav ...

  5. mysql 查出相差年数_MySQL计算两个日期相差的天数、月数、年数

    MySQL自带的日期函数TIMESTAMPDIFF计算两个日期相差的秒数.分钟数.小时数.天数.周数.季度数.月数.年数,当前日期增加或者减少一天.一周等等. SELECT TIMESTAMPDIFF ...

  6. java 日期只计算年月日大小_Java 计算两个日期相差多少年月日

    JDK7及以前的版本,计算两个日期相差的年月日比较麻烦. JDK8新出的日期类,提供了比较简单的实现方法. /*** 计算2个日期之间相差的 相差多少年月日 * 比如:2011-02-02 到 201 ...

  7. java 计算日期相差天数_Java 计算两个日期相差的天数

    当我们需要计算两个日期相差的天数怎么办呢,今天我们就来用 Java 比较两个日期相差的天数,最简单的方法,直接上代码: 第一种,Date类型计算public static int differentD ...

  8. python判断天数_Python计算两个日期相差天数的方法示例

    本文实例讲述了Python计算两个日期相差天数的方法.分享给大家供大家参考,具体如下: #!/usr/bin/python import time import sys def dateinput() ...

  9. mysql计算两个月份之间的差值_MySQL计算两个日期相差的天数、月数、年数

    MySQL自带的日期函数TIMESTAMPDIFF计算两个日期相差的秒数.分钟数.小时数.天数.周数.季度数.月数.年数,当前日期增加或者减少一天.一周等等. SELECT TIMESTAMPDIFF ...

最新文章

  1. jsPlumb(3)-基本概念
  2. 以 27K 成功入职字节跳动,这份《 软件测试面试笔记》让我受益终身...
  3. 直播 | Python Web开发者的破局之道
  4. svn教程----示例二:测试人员拥有读权限
  5. 贝壳集团IPO背后,风投协议之外还要面临何时盈利的问题
  6. JVM调优:打印所有-XX非标参数命令
  7. 多文件同时读写为什么没有单文件读写快?
  8. FFmpeg转OpenCV Mat显示
  9. HDU - 1542 Atlantis(线段树+扫描线)
  10. adb devices 里面有很多 emulator-XXXX的解决方法
  11. Ubuntu apt update(apt-get update)报错、失败
  12. Failed to execute goal org.apache.maven.plugins:ma
  13. ENVI5.1LC08大气校正前期步骤
  14. 使用Hibernate中save方法时由于设置的id的增长方式为assigned报错处理和
  15. 3399 android root,RK3288/3399 Android Root方法
  16. 用PS修改图片上的数字
  17. linux安装beyondcompare
  18. 全面解读VTL(虚拟磁带库)
  19. 【读书笔记】之《月亮与六便士》
  20. c语言移动光标到指定坐标,C语言实现控制台中光标随意移动

热门文章

  1. 2011年4月22日 记
  2. 机器自主学习之基本要素
  3. 如何防止网站被黑客攻击?那是你不知道这几个技巧!
  4. 前端应该了解的直播知识
  5. 【诗意农园,客家桃源】江西大余:洪翔农园基本峻工
  6. Product-based Neural Networks
  7. 3天怒肝5万字!阿里P7大佬手写MySQL超全笔记,还担心学不会吗?
  8. 什么是Redux,如何使用?
  9. OPTI 返回值 意思
  10. Java输入一个数,判断该数是否为质数