将双精度转换为 python 中的时间

convert double to time in python

我的 Django 模型中有一个 TimeField()。我想将这个记录的总和转换为小时。

以下是我认为的实际代码:

hours_week_decimal = Timesheet.objects.filter(owner = request.user.pk, week = datetime.datetime.now().isocalendar()[1]).aggregate(total=Sum('working_hour')) # this method return a dict of decimal
total_hours_week = convertDecimalToHours(hours_week_decimal)

及相关函数:

def convertDecimalToHours(times):
    total_time = 0
    for k, v in times.items():
        total_time += int(v)
    print("type: {} - value: {}".format(type(total_time), total_time))

这回了我:

 type: int - value: 166000

我有两个小时:

 Monday (08:30) and Tuesday(08:30)

它肯定还给我"17:00"

希望你能帮我解决这个问题:)

感谢您的回答,

在我的数据库中,我有一个 "Time" 类型的列。该值的存储方式如下:08:30:00.000000。

在我之前的代码中,时间变量(传入的参数)是这样的:

{'total': 十进制('166000.000000')}

问题是 30m+30m = 60m 是的,是 1h,但你期望计算器能够理解你想要 30+30 = 1h 因此,在您的情况下,您必须将 8:30 显式转换为 8.5

用几行代码扩展示例的快速但不优雅的方法可以是:

  • 将您的整数转换为字符串。
  • 去掉小时(位置 0 和 1)并乘以 60 得到分钟。
  • 将此结果求和到分钟(位置 2 和 3)

对您拥有的每个 TimeField 执行此操作后,将所有以分钟为单位转换的时间相加,然后以小时为单位重新转换。

在你的例子中:

def convertDecimalToHours(times):
total_time = 0
for k, v in times.items():
    tmp_time = str(int(v))
    minutes = int(tmp_time[2:4]) + int(tmp_time[0:2])*60
    total_time += minutes / 60 # Now your 8:30 is 8.5
print("type: {} - value: {}".format(type(total_time), total_time))

你在这里的输出将是 17。 我建议你以此为例来理解这个概念,而不是作为你问题的打包解决方案。