Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Python-来自Windows机器的日期对象--时区问题_Javascript_Python_Date_Strptime - Fatal编程技术网

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

Javascript Python-来自Windows机器的日期对象--时区问题,javascript,python,date,strptime,Javascript,Python,Date,Strptime,我有一个jQuery应用程序,它将日期对象发送到python进行解析。问题是,当我尝试在Windows计算机上使用jQuery时,date对象如下所示: Tue Mar 12 2013 00:00:00 GMT-0600(Mountain Daylight Time) 而在我的Mac电脑上,我得到: Tue Mar 12 2013 00:00:00 GMT-0600(PST) 当我尝试用Python中的strtime函数解析这些时,它失败了,因为它不理解第一个(MDT)末尾的时区。它抱怨这是

我有一个jQuery应用程序,它将日期对象发送到python进行解析。问题是,当我尝试在Windows计算机上使用jQuery时,date对象如下所示:

Tue Mar 12 2013 00:00:00 GMT-0600(Mountain Daylight Time)
而在我的Mac电脑上,我得到:

Tue Mar 12 2013 00:00:00 GMT-0600(PST)
当我尝试用Python中的
strtime
函数解析这些时,它失败了,因为它不理解第一个(MDT)末尾的时区。它抱怨这是一种“未知字符串格式”

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

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

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

dt = datetime.datetime.strptime(jsondate)
这样做:

dt = datetime.datetime.strptime(jsondate.partition('(')[0])
请注意,在
”(“
之后扔掉所有内容仍然会留下
-0600
部分;您只是失去了“PST”或“Mountain shally Time”部分

这些部分对你没有任何好处。
datetime
不理解这些时区名称。而且,即使它理解了,它也没有任何东西可以将它们映射到偏移量(你已经有了偏移量)。如果你想要真正的时区,你需要一些类似的第三方库**

最重要的是,
strtime
专门返回未识别的
datetime
对象。因此,即使
datetime
可以解析和查找时区,它也不会对它们做任何有用的事情,除非您解析
datetime
,然后拉出时区并单独解析和查看向上,然后在
datetime
上调用
astimezon

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

作为补充说明,在连续三个项目中,我在Python端的JSON en/解码器中插入了一个datetime序列化程序(对于有JS端的项目,在JS端插入了一个匹配的序列化程序),以便传递UTC datetime(采用ISO8601格式,因为这对于计算机来说就像从新纪元开始的几秒钟一样容易使用,对于人类来说更容易阅读/编辑)今天还有时区偏移,但如果以后重要,就切换到tzinfo键。这三次都没有变得重要…而那些重要的项目,我通常都会传递日历安排、公历前的日期或其他类似有趣的东西

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

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


**IIRC,
pytz
也不能处理NT风格的时区键,比如“山地夏令时”,所以你实际上需要另一个库来处理它。我想我是从一个库中得到的,它可以处理各种MS日期时间的事情,包括处理微软三个类似1601年的时代之间的差异(两个不完全相同的时代,特殊“时间结束”、“时间开始”和“非日期”值的不同规则,…).

您是否尝试过使用Unix时间?这样您就可以始终避免区域性问题和任何会妨碍您的打印不一致。@Marcrawarn:我现在正在研究这个问题。尝试在jQuery中创建一个UTC日期对象,然后传递给python。真的,我根本不关心时区——如果可以的话不要把它放在一起,这很理想。但是我想我需要管理它,所以我想正确地做它。@Garfonzo
strtime
也不太理解“PST”时区。如果你需要解析它,你需要使用一个单独的时区(或日期解析)库。如果你不需要它(例如,因为您只处理来自单个时区的本地时间,尽管考虑到您的两个示例有两个不同的时区,这似乎不太可能…)最简单的方法是先将其剥离,然后进行解析。无论如何,传递UTC日期或传递时区和“天真”几乎总是最好的本地日期作为单独的对象,而不是试图传递带有时区的本地日期。