当前位置: 首页 > 面试题库 >

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

卫弘图
2023-03-14
问题内容

我得到这样的开始日期:

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)


 类似资料:
  • 问题内容: 我需要在Java中将分钟转换为小时和分钟。例如260应该是4:20。任何人都可以帮助我如何进行转换。 问题答案: 如果您的时间在一个名为 再简单不过了

  • 问题内容: 我有一个以秒为单位返回信息的函数,但我需要以小时:分钟:秒存储该信息。 有没有简单的方法可以在Python中将秒转换为这种格式? 问题答案: 你可以使用功能:

  • 问题内容: 我正在尝试转换两个“持续时间”,但是由于一个是a而另一个是a : 将a转换为a的有效方法是什么? 我已经检查了文档,并且没有内置的方法可以在这两种类型之间进行转换。 问题答案: 是 不是一个时间 ,它是一天一个点。如果要将其解释为持续时间,请将其转换为午夜以来的持续时间: 演示: 您可能首先需要检查如何获取对象,也许从输入数据中获取对象的路径更短?例如,请勿长时间使用。

  • 因此,我试图制作一个程序,可以将s从输入转换为h、m和s。到目前为止,我的代码如下所示: 好的,所以我必须将s,m,h初始化为0,因为如果不是的话,我在if语句中遇到了问题,所以我把它设置为0,因为我可以稍后更改:)好的。所以现在这个程序的问题是,如果我输入3603,我会得到这个输出:3603s=1H60M3603s,如果我输入3600,我会得到:3600s=1H60M3600s,但输出应该分别是

  • 问题内容: 我有一个称为分钟的变量,例如250分钟。 如何使用以下格式的PHP将分钟数转换为小时数和分钟数: 问题答案:

  • 我是Python新手,遇到了这个问题。我想创建一个程序,用户输入秒数,并将其转换为天、小时、分钟和秒。然而,例如,我希望程序在100000秒内输出1天、3小时、46分钟、40秒。然而,mine也用小数输入计算结果,比如说1.157天,其他类别也一样。任何帮助都将不胜感激,非常感谢。