V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
qazwsxkevin
V2EX  ›  Python

请教两个 datetime.datetime 要计算小时差,怎么做会比较好? 要先转成 datetime.timedelta 再做吗?

  •  
  •   qazwsxkevin · 2020-10-20 19:40:44 +08:00 · 1881 次点击
    这是一个创建于 1499 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有两个 datetime.datetime 数据
    nowTime = datetime.datetime.now()
    getFromdatabaseTime = dbTask.get('RecordTime')

    如果: TimeResult = (nowTime - getFromdatabaseTime).seconds 可以得到一个数值,不过似乎不准的一个什么玩意。。。(汗)

    鉴于印象中以前做过 datetime.timedelta 的计算,似乎 datetime.timedelta 的方法比较容易写,直观又方便 但看了一下文档,似乎又没提到 datetime.timedelta 和 datetime.datetime 的互转。
    datetime.datetime 要转成 datetime.timedelta ? 这个应该怎么转?
    反过来 datetime.timedelta 要转成 datetime.datetime ?
    如果大哥们硬要把 datetime.datetime 以拆元组里面的值,分解写计算过程出结果,这就离谱了(笑,逃~)

    5 条回复    2020-10-21 12:54:50 +08:00
    raymanr
        1
    raymanr  
       2020-10-20 19:54:09 +08:00   ❤️ 2
    datetime.datetime 是具体时间的数据类型
    datetime.timedelta 是代表时间差的数据类型

    我不清楚 datetime 怎么转换 timedelta, 会出什么问题

    不过可以告诉你是 datetime - datetime 就会得到 timedelta, 然后 total_seconds / 3600 就是小时了

    delta 是数学中常用来表示差值的希腊字符
    Acoffice
        2
    Acoffice  
       2020-10-20 20:13:58 +08:00 via Android
    你先转或者直接用时间戳减完,再转也是可以的。
    raymanr
        3
    raymanr  
       2020-10-20 20:46:00 +08:00   ❤️ 2
    突然想起来了, timedelta 是由天数和秒数两个数值构成

    比如 timedelta(days=1,seconds=22)

    你访问的 seconds 属性只会返回秒数部分 22, 这是你代码有问题的地方

    所以需要调用 total_seconds() 方法
    qazwsxkevin
        4
    qazwsxkevin  
    OP
       2020-10-21 00:02:07 +08:00
    恍然大悟,total_seconds()
    感谢!!
    shm7
        5
    shm7  
       2020-10-21 12:54:50 +08:00
    @qazwsxkevin 这还需要恍然大雾嘛。

    官方文档丢给你: https://docs.python.org/3.6/library/datetime.html
    直接取 timedelta 的 seconds 属性就行了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4971 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:50 · PVG 17:50 · LAX 01:50 · JFK 04:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.