【问题标题】:Parsing date string form javascript to python将日期字符串从javascript解析为python
【发布时间】:2019-11-22 14:29:07
【问题描述】:

我有一个 javascript 日期对象,我把它变成一个字符串,然后发送到我的后端以使用 python 解析。

这里是一个javascript日期字符串'Mon Aug 18 2014 21:11:54 GMT+0200 (Centraleuropæisk sommertid)的例子

我制作了一个 python 辅助函数来帮助解析日期。

def datetime_converter(datetime_str):
    return datetime.strptime(datetime_str, "%a, %d %b %Y %H:%M:%S %Z")

这应该根据this answer正确解析日期

我认为问题在于末尾附加了一个额外的文本(这是丹麦语,因为我来自丹麦) (Centraleuropæisk sommertid)

有人知道解决方法吗? 我可以将字符串拆分为(,但这似乎不是一个好的解决方案。

这是我得到的例外data 'Mon Aug 18 2014 21:11:54 GMT+0200 (Centraleuropæisk sommertid)' does not match format '%a, %d %b %Y %H:%M:%S %Z'

【问题讨论】:

  • 你可能也对这个其他issue感兴趣

标签: javascript python date datetime


【解决方案1】:

这应该适用于您的情况:

from email import utils
utils.parsedate_to_datetime('Mon Aug 18 2014 21:11:54 GMT+0200 (Centraleuropæisk sommertid)')

你可以在这里转换成你想要的格式。

【讨论】:

  • 这会返回什么?
  • 返回datetime.datetime(2014, 8, 18, 21, 11, 54)
  • 虽然这不尊重时区。如果你从字符串中删除 GMT,它会。
  • @SebastinSanty 问题是删除 GMT 部分会很麻烦,因为每种语言的语言/格式可能不同。所以拆分它会导致一些问题。
【解决方案2】:

所以我建议改用 javascript Date .toISOString() 方法 (MDN Docs),它会为您提供 ISO8601 格式的日期字符串 (YYYY-MM-DDTHH:MM:SSZ),然后您可以相应地更改解析器函数:

def datetime_converter(datetime_str: str) -> datetime:
    return datetime.strptime(datetime_str, "%Y-%m-%dT%H:%M:%S%z")

从 python 3.6 开始,您还可以按照PEP-528 标准对您的 python 代码进行类型注释

【讨论】:

  • 非常有趣,您对函数使用的语法是什么?
  • Python type annotation,如果您正在处理较大的项目,或者只是想阅读您 3 个月前编写的代码,这对于了解应该如何使用函数非常有帮助。
  • 实际上非常好的技巧,我不知道你可以做到这一点。我只尝试过使用 python 中的数据类 API 进行类似的操作。
  • 这确实很有帮助,特别是如果与docstrings、更合理的函数名称(如parse_ISO8601)和类似的文档字符串:'''将ISO8601日期解析为python日期时间object 参数: date_string (str):一个 ISO8601 格式的日期时间字符串 返回: datetime:一个表示输入字符串时间的日期时间对象 ''' 但是在这种情况下,这是不必要的
  • @baileyhaldwin 你记得改变从你的前端发送的字符串的格式吗?
猜你喜欢
  • 1970-01-01
  • 2011-08-02
  • 2012-06-14
相关资源
最近更新 更多