【问题标题】:Use Python module to convert a non-Linux timestamp into total number of seconds?使用 Python 模块将非 Linux 时间戳转换为总秒数?
【发布时间】:2021-12-31 02:56:13
【问题描述】:

我有一个非标准(非 Linux)时间戳,显示为 str,需要转换为 int,其中包含在那里表示的总秒数。

我的源数据如下所示:

timestr = "1 year 26 weeks 1 day 23 hours 29 minutes"

我可以轻松地从该字符串中提取不同的值并执行手动计算,但希望其中一个时间模块可以为我做数学计算。我只是找不到任何需要这种特殊计算的例子,因为我不关心我的数据的纪元或任何日期时间表示。

以上面的示例为例,我计划在我的代码中相应地分配值:

years=1
weeks=26
days=1
hours=23
minutes=29

这种情况下的答案是47431740 总秒数。

【问题讨论】:

  • 会严格遵循这个模式吗?
  • @juanpa.arrivillaga 是的!
  • 好吧,不幸的是,我认为任何内置函数都无济于事。但这似乎很简单,不是吗? years*31540000 + weeks*604800 + days*86400 + 3600*hours + minutes*60
  • @juanpa.arrivillaga 是的,这样的东西很干净,谢谢。我想我假设使用 datetime 和其他模块具有的所有各种方法,它会内置这个,但我找不到任何东西。
  • 是的,不幸的是,甚至 arrow 都不支持带年份的时间增量 :( 可能是因为年份不明确

标签: python time


【解决方案1】:

当你阅读它时,你会感到尴尬。写的时候有感觉。

from datetime import datetime, timedelta
from math import ceil

import parsedatetime

time_str = "1 year 26 weeks 1 day 23 hours 29 minutes"

cal = parsedatetime.Calendar()
td: timedelta = cal.parseDT(time_str)[0] - datetime.now()
print(ceil(td.total_seconds()))

答案是对的,47431740。恐怕,这是最好的。 Used library.

【讨论】:

  • 注意,这似乎依赖于 parsedatetime 将该字符串解析为 1 年 26 周 1 天 23 小时 29 分钟,从现在开始。这可能不适用于闰年
  • @juanpa.arrivillaga,好收获。顺便说一句,我不确定应该如何处理闰年。我们可以假设世界在 1970 年 1 月 1 日 00:00 UTC 开始,否则:)
【解决方案2】:

您可以使用https://duckling.wit.ai/ 从您的字符串中提取时间实体。它的 dockerized 版本位于:https://hub.docker.com/r/rasa/duckling

它还有一个 python 包装器:https://github.com/FraBle/python-duckling

但我更喜欢 dockerized 版本,因为它易于使用。

【讨论】:

  • 你确定吗?在提供的链接中,它无法解析 OP 的字符串。
  • 对于初学者来说,对于 OP 正在做的事情来说,这是 巨大的矫枉过正,甚至没有完成 OP 需要的事情。阅读他们的问题
  • 你没用过,怎么说不行呢?您是否总是通过演示寻找答案?
  • OP 没有要求库来解析该字符串。解析该字符串是微不足道的,并且不需要一些 dockerized NLP 算法。你可以用一个简单的正则表达式来做这件事,或者哎呀,可能更简单。但是,如果您声称这是一个解决方案,那么您需要在问题本身中提供该解决方案
  • 如果 NLP 是指机器学习或深度学习模型,则不是。正则表达式和正则表达式的 Duckling 时间解析工作也可以是 NLP。因此,请阅读更多内容。
猜你喜欢
  • 2016-11-10
  • 2016-03-04
  • 2016-03-04
  • 2013-03-09
  • 2014-11-27
  • 2017-10-24
  • 1970-01-01
相关资源
最近更新 更多