【问题标题】:Hours and time converting to a certain format [closed]小时和时间转换为某种格式[关闭]
【发布时间】:2021-05-14 04:45:45
【问题描述】:

我一直在尝试将以下时间格式8.25 (fractional hours) 更改为8.15 meaning 8:15。和17.7517.45 meaning 17:45。问题是我特别需要那种格式(timedelta)e.g 17.45 带有一个点. 而不是:

【问题讨论】:

  • 提示:60 * .75 = 45...
  • 删除了pandas标签,因为它无关紧要。
  • 问题不清楚所有文字的类型。它告诉我们一些关于 format 的信息,但只显示令人困惑的示例。
  • @Wolf:我认为这里的重点是像17.75 这样的数字不是时间格式,而是分数小时,即持续时间 (在 Python 中由 timedelta 表示)。我在 Dave 的 other question 上发布了如何做到这一点的方法。
  • 在这里整合your follow-up question会不会少很多困惑?

标签: python python-3.x time timedelta


【解决方案1】:

这可以通过使用适当的小数小时表示来方便地完成,即timedelta。如果输入是字符串数据类型,先转换为浮点数。

例如:

from datetime import datetime, timedelta

for td in [8.25, 17.75]:
    # add the duration as timedelta to an arbitrary date to get a time object:
    print((datetime(2020,1,1) + timedelta(hours=td)).time())
08:15:00
17:45:00

使用pandas,可能看起来像

import pandas as pd

s = pd.Series([8.25, 17.75])

refDate = '2020-01-01' # need a date..

t = pd.Timestamp(refDate) + pd.to_timedelta(s, unit='h')

print(t)

# 0   2020-01-01 08:15:00
# 1   2020-01-01 17:45:00
# dtype: datetime64[ns]

print(t.dt.time)

# 0    08:15:00
# 1    17:45:00
# dtype: object

【讨论】:

    【解决方案2】:

    鉴于您的格式字符串HH.MM,您可以按如下方式处理它:

    my_time = "17.75"
    hours, minutes = my_time.split(".")  # (17, 75)
    minutes_converted = round(float(minutes) / 100 * 60)  # 45
    my_time_converted = "{}.{}".format(hours, minutes_converted)  #17.45
    print(my_time_converted)
    
    > 17.45
    

    【讨论】:

    • 非常感谢。它可以正常工作,但现在我需要其他格式,例如17:45,而不仅仅是17.45。我试图修改上面的代码,但它也没有工作。鉴于my_time = "17.75" 中的值仅采用该形式。
    • @Dave 你只需要在上面的代码中将{}.{} 更改为{}:{}...
    • @deceze OP 认为两者都想要? ...一个真正令人困惑(和令人沮丧)的案例,我们被拒绝提供真正有用的细节!
    猜你喜欢
    • 1970-01-01
    • 2010-12-19
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 2015-01-24
    相关资源
    最近更新 更多