将双精度转换为 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。
我建议你以此为例来理解这个概念,而不是作为你问题的打包解决方案。
我的 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。 我建议你以此为例来理解这个概念,而不是作为你问题的打包解决方案。