如何在Python中将datetime.timedelta转换为分钟,小时?

发布于2019-08-26 13:15


我得到一个这样的start_date:

from django.utils.timezone import utc
import datetime

start_date = datetime.datetime.utcnow().replace(tzinfo=utc)
end_date = datetime.datetime.utcnow().replace(tzinfo=utc)
duration = end_date - start_date

我得到这样的输出:

datetime.timedelta(0, 5, 41038)

如何将此转换为正常时间,如下所示?

这样10分钟,1小时

解决方案


没有内置的timedelta对象格式化程序,但它很容易自己做:

days, seconds = duration.days, duration.seconds
hours = days * 24 + seconds // 3600
minutes = (seconds % 3600) // 60
seconds = seconds % 60

或者,等效地,如果您使用的是Python 2.7+或3.2+:

seconds = duration.total_seconds()
hours = seconds // 3600
minutes = (seconds % 3600) // 60
seconds = seconds % 60

现在您可以随意打印:

'{} minutes, {} hours'.format(minutes, hours)

例如:

def convert_timedelta(duration):
    days, seconds = duration.days, duration.seconds
    hours = days * 24 + seconds // 3600
    minutes = (seconds % 3600) // 60
    seconds = (seconds % 60)
    return hours, minutes, seconds
td = datetime.timedelta(2, 7743, 12345)
hours, minutes, seconds = convert_timedelta(td)
print '{} minutes, {} hours'.format(minutes, hours)

这将打印:

9 minutes, 50 hours

如果你想得到“10分钟,1小时”而不是“10分钟,1小时”,你也需要手动完成:

print '{} minute{}, {} hour{}'.format(minutes, 's' if minutes != 1 else '',
                                      hours, 's' if minutes != 1 else '')

或者你可能想写一个english_plural函数's'为你做位,而不是重复自己。

从你的评论中,听起来你真的想把日子分开。这更容易:

def convert_timedelta(duration):
    days, seconds = duration.days, duration.seconds
    hours = seconds // 3600
    minutes = (seconds % 3600) // 60
    seconds = (seconds % 60)
    return days, hours, minutes, seconds

如果要将此转换为单个值以存储在数据库中,然后将该单个值转换回格式化,请执行以下操作:

def dhms_to_seconds(days, hours, minutes, seconds):
    return (((days * 24) + hours) * 60 + minutes) * 60 + seconds

def seconds_to_dhms(seconds):
    days = seconds // (3600 * 24)
    hours = (seconds // 3600) % 24
    minutes = (seconds // 60) % 60
    seconds = seconds % 60
    return days, hours, minutes, seconds

所以,把它放在一起:

def store_timedelta_in_database(thingy, duration):
    seconds = dhms_to_seconds(*convert_timedelta(duration))
    db.execute('INSERT INTO foo (thingy, duration) VALUES (?, ?)',
               thingy, seconds)
    db.commit()

def print_timedelta_from_database(thingy):
    cur = db.execute('SELECT duration FROM foo WHERE thingy = ?', thingy)
    seconds = int(cur.fetchone()[0])
    days, hours, minutes, seconds = seconds_to_dhms(seconds)
    print '{} took {} minutes, {} hours, {} days'.format(thingy, minutes, hours, days)
(0)

相关推荐

  • 定投指数到底能不能赚钱?Python 来告诉你答案

    来源:Python 技术「ID: pythonall」 受疫情严重影响,全球股市都在不断下跌,就连一贯成熟.增长稳定的美股也在接二连三的不断向下熔断,仅三月份已经熔断五次了.要知道美股历史上的第一次熔 ...

  • 80 个例子,彻底掌握Python日期时间处理!

    文章很长,高低要忍一下,如果忍不了,那就收藏吧,总会用到的! 使用 time 模块展示当前日期和时间 将天.小时.分钟转换为秒 使用 Pandas 获取当前日期和时间 将字符串转换为日期时间对象 以毫 ...

  • python-时间差值计算

    方式一:需要计算的时间是固定值 import datetime c="2020-12-08 11:30:00" d1=datetime.datetime.strptime(str( ...

  • 如何在 Windows 10 中将 MBR 分区转换为 GPT 分区

    原创 大眼仔旭 大眼仔生活圈 2020-07-23如果要使用 UEFI 引导模式而不是 BIOS,则需要将 MBR 转换为 GPT.虽然在安装 Windows 时直接选择 UEFI 更容易,但在使用 ...

  • “X天X小时X分钟”格式数据分别转换为分钟、小时、秒的方法

    Excel情报局 OFFICE爱好者大本营 用1%的Excel基础搞定99%的职场工作 做一个有价值感的Excel公众号 Excel是门手艺 玩转需要勇气 数万Excel爱好者聚集地 自我提升也是一种 ...

  • 如何在Python中操作日期和时间

    编写Python程序,处理日期和时间经常会遇到,幸好Python本身集成了很多日期.时间相关的模块,让这件繁琐的工作变的方便.本文介绍Python中功能强大的datetime模块. datetime模 ...

  • 高手如何在Python中使用collections模块

    来源:AI入门学习 介   绍 Python 3有许多内置的数据结构,包括元组.字典和列表.数据结构为我们提供了一种组织和存储数据的方法.collections模块能够帮助我们高效地填充和操作数据结构 ...

  • 如何在 Python 中使用断点调试

    实际上没人能一次就写出完美的代码,除了我.但是世界上只有一个我. -- 林纳斯·托瓦兹(Linux 之父) 既然不是神,写代码自然免不了要修改.修改代码的过程被称作调试,又叫 debug. 刚接触编程 ...

  • 动车组为何在有的车站只停几分钟,有的站却要停靠20分钟?权威解读来了!

    进入#高铁#时代后,动车组列车不仅运行速度快,停靠车站的时间也较短,一般只有几分钟,但是在部分车站,动车组列车会停站长达20分钟. 这是什么原因?列车停站期间工作人员都在干啥? 01列车换向运行调整座 ...

  • 如何在OpticStudio中将高斯光整形为平顶光

    概要 光束整形光学元件可以将入射光的光强分布转换为其他特定的分布输出.最常见的例子就是将激光器产生的高斯分布的光转换为平顶(Top-Hat)分布的光输出.在评价函数中使用几何光线来优化透镜的矢高是一个 ...

  • 如何在PPT中将正方形图片设置为圆形显示?

    如何在PPT中将正方形图片设置为圆形显示?

  • 如何在Python中操作MySQL~

    一. python操作数据库介绍 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口.Python 数据库接口支持非常多的数据库, ...