python如何比较目标时间与当前时间的月份差值

问题

最近在编写一个脚本,从数据库里找到一个订单的创建时间,然后需要判断当前时间和订单创建的时间间隔几个月。比如订单创建的时间是2021-8-26,现在的时间是2022-03-10,那我想得出的月份差就是6个月

那如何使用python来实现呢?

解决方法

1. 先将目标时间和最近时间都通过年月日的方式取到

因为我使用的是pandas库来读取数据库语句的,那刚好pandas是有方法可以直接读取年月日数据

import pymysql
import pandas as pd

df = pd.read_sql(sql=sql, con=mysql_cn) #通过sql读取需要的数据
already_revenue_time = df.trade_start_time.values[0]  #将该订单创建时间取出,但是年月日+0000的样式
trade_start_time =pd.to_datetime(already_revenue_time).date() #只保留年月日样式,输出为2021-08-26

2. 找到当前时间

通过datatime库自带的方法,即可以拿到当天日期的年月日时间

import datetime
current_time = datetime.date.today() #当前时间,输出数据为2022-03-10

3.月份相差比较函数

自定义一个计算月份差值的函数

def months(str1,str2):
    #比较目标时间和当前时间相差几个月的函数
    year1=str1.year
    year2=str2.year
    month1=str1.month
    month2=str2.month
    #比如2021-8-26 和2022-3-10,只相差了6个月,没有到7个月,所以我做了一下日数据的判定,保证得到的月份更加精准
    if str1.day >= str2.day:
        num=(year1-year2)*12+(month1-month2)
    else:
        num =(year1-year2)*12 + (month1-month2)-1
    return num

4. 函数调用

if __name__ == "__main__":
    month_difference =months(current_time,trade_start_time) 
    print(month_difference)  #输出的结果是6

5. 完整代码(因sql是公司语句,不方便公开,大家可对照自家公司业务进行修改,学习方法就行)

import pymysql
import pandas as pd
import datetime

def months(str1,str2):
    #比较目标时间和当前时间相差几个月的函数
    year1=str1.year
    year2=str2.year
    month1=str1.month
    month2=str2.month
    #比如2021-8-26 和2022-3-10,只相差了6个月,没有到7个月,所以我做了一下日数据的判定,保证得到的月份更加精准
    if str1.day >= str2.day:
        num=(year1-year2)*12+(month1-month2)
    else:
        num =(year1-year2)*12 + (month1-month2)-1
    return num

def get_data():
    df = pd.read_sql(sql=sql, con=mysql_cn) #通过sql读取需要的数据
    already_revenue_time = df.trade_start_time.values[0]  #将该订单创建时间取出,但是年月日+0000的样式
    trade_start_time =pd.to_datetime(already_revenue_time).date() #只保留年月日样式,输出为2021-08-26
    current_time = datetime.date.today() #当前时间,输出数据为2022-03-10
    month_difference =months(current_time,trade_start_time)  #输出的结果是6
    
if __name__ == "__main__":
    print(f"月份相差:{get_data()}个月")

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值