吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1507|回复: 12
收起左侧

[求助] python,求一个比较好的两个日期时间计算时间差的函数

  [复制链接]
cqwcns 发表于 2021-6-6 11:39
如题,python,输入两个日期时间,获得两个日期时间相差的年月日时分秒。
要考虑闰年、闰月等情况,求比较好的函数,谢谢。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xiaosuobjsd 发表于 2021-6-6 11:46
这种问题,最好去悬赏区,这里不会有人给你免费解答的
勇者为王 发表于 2021-6-6 11:54
 楼主| cqwcns 发表于 2021-6-6 12:08
我现在写成这样。

[Python] 纯文本查看 复制代码
import datetime

start_time = datetime.datetime(2004, 10, 20, 15, 15, 00)
print('开始时间:', start_time)
end_time = datetime.datetime.now()
print('结束时间:', end_time)

print('相差:', (end_time - start_time))


输出是这样:

开始时间: 2004-10-20 15:15:00
结束时间: 2021-06-06 12:06:03.751476
相差: 6072 days, 20:51:03.751476


我希望输出是这样:
开始时间: 2004-10-20 15:15:00
结束时间: 2021-06-06 12:06:03.751476
相差: X年X月X日 X时X分X秒


不知道要怎么改,请指教,谢谢。
howyouxiu 发表于 2021-6-6 12:19
你这个问题本身就是有问题的,时间之差就是一个固定的值,怎么也不能转换成某一天。。
 楼主| cqwcns 发表于 2021-6-6 12:25
howyouxiu 发表于 2021-6-6 12:19
你这个问题本身就是有问题的,时间之差就是一个固定的值,怎么也不能转换成某一天。。

我希望时获得相差:16年10个月20天 8小时5分钟20秒

这样的结果。
ccwuax 发表于 2021-6-6 12:51
你这个就是年减年,月减月,日减日呗,除了年减年傻瓜式减一下,剩下的按当看时间算即可,不要想得太复杂
fanvalen 发表于 2021-6-6 13:18
其实你的问题里有个问题
相差!=间隔
0x00 发表于 2021-6-6 13:54
先转成时间戳,计算差值,再转成时间


#!/usr/bin/python3.7
# -*- coding: UTF-8 -*-
import time

start_time = '2012-05-26 20:00:00'
start_time_s = int((time.mktime(time.strptime(start_time, "%Y-%m-%d %H:%M:%S"))))
print('开始时间', start_time)
# print('开始的时间戳', start_time_s)
end_time_s = time.time()
print('结束时间', (time.strftime('%Y-%m-%d %H:%M:%S ', time.localtime(end_time_s))))
swap_time = end_time_s - start_time_s
# print(swap_time)
m, s = divmod(swap_time, 60)
h, m = divmod(m, 60)
d, h = divmod(h, 24)
print('相差:%d天%02d小时%02d分%02d秒' % (d, h, m, s))
wl2021 发表于 2021-6-6 15:20
[Python] 纯文本查看 复制代码
import datetime


def days_of_month(year, month):
    if month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12:
        return 31
    elif month == 4 or month == 6 or month == 9 or month == 11:
        return 30
    elif month == 2 and ((year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)):
        return 29
    else:
        return 28


start_time = datetime.datetime(2004, 2, 20, 15, 15, 00)
print('开始时间:', start_time)
end_time = datetime.datetime.now()
print('结束时间:', end_time)
if end_time < start_time:
    end_time, start_time = start_time, end_time
delta = end_time - start_time

y = end_time.year - start_time.year
m = end_time.month - start_time.month
d = end_time.day - start_time.day
h = end_time.hour - start_time.hour
mi = end_time.minute - start_time.minute
sec = end_time.second - start_time.second

if sec < 0:
    mi -= 1
    sec += 60
if mi < 0:
    h -= 1
    mi += 60
if h < 0:
    d -= 1
    h += 24
if d < 0:
    m -= 1
    d += min(days_of_month(end_time.year, end_time.month), days_of_month(start_time.year, start_time.month))
if m < 0:
    y -= 1
    m += 12

print(f'相差:{y}年 {m}月 {d}天 {h}时 {mi}分 {sec}秒')

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
cqwcns + 1 + 1 热心回复!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 02:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表