gpt4 book ai didi

javascript - Python - 来自 Windows 机器的日期对象 - 时区问题

转载 作者:行者123 更新时间:2023-11-30 18:07:00 24 4
gpt4 key购买 nike

我有一个 jQuery 应用程序,它向 python 发送一个日期对象进行解析。问题是当我尝试在 Windows 机器上使用我的 jQuery 时,日期对象看起来像这样:

Tue Mar 12 2013 00:00:00 GMT-0600(Mountain Daylight Time)

而在我的 Mac 上,我得到:

Tue Mar 12 2013 00:00:00 GMT-0600(PST)

当我尝试使用 strptime 函数在 Python 中解析这些时,它失败了,因为它不理解第一个(MDT)末尾的时区。它提示说这是一种“未知的字符串格式”。

我该如何解决这个问题?我做错了什么吗?

最佳答案

这里的最佳 解决方案可能是让您的jQuery 代码在发送日期时间之前将其转换为GMT。 (如果您也想要时区,请单独发送。)然后您可以将它们从 Python 端的 JSON(或其他)中取出,将它们转换为带有 strptime 的 GMT datetime 对象,并使用它们,您就完成了。

但是最简单的解决方案,*代码更改最少,就是让 jQuery 做错事并在 Python 端丢弃时区。基本上,而不是这个:

dt = datetime.datetime.strptime(jsondate)

这样做:

dt = datetime.datetime.strptime(jsondate.partition('(')[0])

请注意,丢弃 '(' 之后的所有内容仍然会留下 -0600 部分;您只是丢失了“PST”或“Mountain Daylight Time "部分。

无论如何,这些部分对您没有任何好处。 datetime 不理解这些时区名称。而且,即使它这样做了,除了偏移量(您已经拥有)之外,它没有任何东西可以将它们映射到。如果你想要实时时区,你需要一些第三方库,比如 pytz .**

最重要的是,strptime 专门返回朴素的 datetime 对象,而不是有意识的对象。所以,即使 datetime 可以解析和查找时区,它仍然不会对它们做任何有用的事情,除非你解析了 datetime,然后取出时区并分别解析并查找,然后在 datetime 上调用 astimezon

因此,总而言之,丢弃这些信息的最坏情况正是您已经拥有的。

作为旁注,在连续三个项目中,我将一个日期时间序列化器推送到 Python 端的 JSON en/decoder(以及一个匹配的 JS 端序列化器,对于有 JS 端的序列化器)所以我可以传递一个 UTC 日期时间(采用 ISO8601 格式,因为这对于计算机来说就像自纪元以来的秒数一样容易使用,并且对于人类来说更容易阅读/编辑)和今天的时区偏移量,但是切换到 tzinfo关键如果它因为以后很重要。这三次,它从未变得重要……而它 很重要的项目,我通常一直在传递 ICAL 时间表或公历前日期或其他类似有趣的东西。

最后,作为一个在我的职业生涯中写了太多与日期相关的代码的人,我不得不说:如果你知道任何邪恶的霸主计划接管世界,如果他们 promise 废除时区,我愿意忽略他们其他奴役人类或让小猫打架婴儿并注册成为追随者的计划。

* ……至少对我来说是最简单的,因为我比 JS 和 jQuery 更了解 Python。 :)

** IIRC,pytz 也无法处理 NT 风格的时区键,例如“山区夏令时”,因此您实际上还需要另一个库来处理它。我想我是从一个做各种 MS 日期时间的库中得到的,包括处理微软的三个相似的 1601-ish 纪元时间之间的差异(两个不完全相同的纪元,特殊“时间结束”的不同规则“和“时间开始”和“不是日期”值,......)。

关于javascript - Python - 来自 Windows 机器的日期对象 - 时区问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15581431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com