【问题标题】:Converting float into date with Python使用 Python 将浮点数转换为日期
【发布时间】:2022-01-24 17:54:29
【问题描述】:

我目前正在努力理解日期时间的文档。

我正在报废 Excel 数据,它给我的日期是浮点数,我想重新转换它以再次有日期。

我的日期格式是小时:秒,例如我想要

0.586111 --> 14:04:00

0.585417 --> 14:03:00

我尝试使用date time.fromtimestamp(0.586111).strftime('%H-%S')将其重新转换为所需的格式,但输出为'01-00',我必须承认我并不真正了解发生了什么,所以出了什么问题。

我知道一些关于将日期格式化为浮点数的问题已经被问过,但另一种方式却很少见,我相信有些人可以更清楚地了解在这种情况下使用日期时间。

感谢您的宝贵时间,我希望我的问题可以理解。

【问题讨论】:

  • 你的花车是什么——它们代表什么?
  • 我有一个 excel 文件中的数据,我用(播种)python 提取这些数据并将其放入数据框中。然后,当我渲染数据框时,对应于我在 excel 中的日期(例如 14:01)的行被转换为浮点数(这里:0.586111)。是不是更清楚?
  • 我编辑了它,实际上是 14:04 而不是 14:01 我走错了对不起
  • 这个数字看起来像一个 24 小时时间段的分数。例如0.586111 * 24 = 14.066664
  • 它很接近,但我会说 2 分钟的间隔有点奇怪

标签: python datetime floating-point type-conversion strftime


【解决方案1】:

您使用 fromtimestamp 的解决方案实际上非常接近,但它需要几秒钟,而不是小数天,因此请先转换为那些。

或者,您可以将小数天作为时间增量添加到日期时间对象。

前:

from datetime import datetime, timedelta, timezone

sec_per_day = 86400
print(datetime.fromtimestamp(0.586111 * sec_per_day, tz=timezone.utc).strftime('%H:%M:%S'))
# 14:03:59

print((datetime.min + timedelta(days=0.586111)).strftime('%H:%M:%S'))
# 14:03:59

注意:不要忘记将 tz 设置为 UTC,否则您的本地时间的 UTC 偏移量可能会给您带来意想不到的结果。如果您使用datetime.min,则不存在时区,所以不用担心。

【讨论】:

  • 完美运行!谢谢
【解决方案2】:

时间是 24 小时周期的一小部分。可能有一个内置函数可以将其转换为时间。如果没有,试试这个:

def convert_time(t):
    t24 = t * 24
    hours = int(t24)
    # Discard integer part. Ex 14.066664 -> 0.066664
    t24 %= 1
    minutes = int(t24 * 60)
    t24 -= minutes / 60
    seconds = int(t24 * 3600)
    return datetime.time(hours, minutes, seconds)

输出:

>>> convert_time(0.586111).strftime("%H:%M:%S")
'14:03:59'
>>> convert_time(0.585417).strftime("%H:%M:%S")
'14:03:00'

【讨论】:

  • 这似乎是一个快速而实用的解决方案。谢谢!
  • 实际上,当我尝试设置您的代码时,它首先问我m 是什么,所以我相信它的minutes,当我尝试运行它时,我得到一个 ValueError :day is out of range for month
  • 你知道为什么它不能在我的电脑上运行吗?
  • 是的,有一些错别字。固定。
猜你喜欢
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-22
  • 2013-12-29
  • 2022-01-17
  • 1970-01-01
相关资源
最近更新 更多