【问题标题】:Converting human readable date and time into Unix time float将人类可读的日期和时间转换为 Unix 时间浮点数
【发布时间】:2017-05-24 22:02:10
【问题描述】:

我必须将 ls 的 rsync 返回的日期和时间转换为 time.time() 返回的 Unix 纪元时间浮点数。

对我来说,此时此刻它看起来像: 2017 年 5 月 24 日 hh:mm:ss。 但据我所知,由于 rsync 使用 ssh 和本机 ls,它可能因机器而异,我希望通过它。

是否有任何简单的方法可以将最常见的人类可读日期和时间普遍转换回 Unix 时间浮点数? 要清楚。我希望能够将 D 和 T 的任何文本表示形式转换为浮点数。

如果 datetime 可以做到这一点,我目前无法找到。

【问题讨论】:

  • 对于ls,您可以使用ls -l '--time-style=+%s' 指定时间的格式。它实际上 依赖于发行版,而是更多地依赖于locale:关于如何表示时间/日期的文化设置。例如,我认为在以色列配置的机器可能会使用犹太年。
  • 嗯,是的,我确信 ls 尊重本地设置,这对我一点帮助都没有。特别是当我使用 rsync 来访问 ls 时。我会看看我是否可以从那里影响时间输出格式,但我对此表示怀疑。我可能最终会直接使用 ssh 来获取文件的统计信息,但很高兴知道 Python 是否可以进行转换。它会大大简化一些事情。

标签: python unix time


【解决方案1】:

您需要先使用time.strptime,然后再使用calendar.timegm 如果要转换为本地时间或 UTC 时间,则有不同的选项。查看文档。 要获取浮点部分,您需要输入小时、分钟、秒和毫秒。在您的示例中,您只给出年、月和日,因此其余部分应该为零,即没有毫秒,因此没有浮点部分。

这是一个最小的例子:

import calendar, time

t = time.strptime('2017/05/24', '%Y/%m/%d')
epoch = calendar.timegm(time.struct_time(t))
print(epoch)

1495584000

【讨论】:

  • 太棒了! time.ctime(epoch) 给出 'WedMay 24 00:00:00 2017' 我知道是这样的!不过,这不会自动进行格式识别。如果它也能实现,那就太好了。也许可以用正则表达式来做点什么。
  • 您只需要确定它可以与任何格式一起使用的格式,例如 time.strptime('2017/05/24 23:45:04', "%Y/%m/%d %H:%M:%S") 检查此表docs.python.org/3.7/library/time.html#time.strftime
  • 如果您有非统一格式,那么您必须为每个格式制作特定的案例。
猜你喜欢
  • 1970-01-01
  • 2013-08-31
  • 2011-05-26
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 2021-03-14
相关资源
最近更新 更多