Javascript 为什么Python日期时间和JS日期不匹配?

Javascript 为什么Python日期时间和JS日期不匹配?,javascript,python,python-3.x,pytz,python-dateutil,Javascript,Python,Python 3.x,Pytz,Python Dateutil,我有一个代码,返回给定日期的UTC偏移量: >>> import datetime >>> import pytz >>> cet = pytz.timezone("Europe/Moscow") >>> cet.localize(datetime.datetime(2000, 6, 1)) datetime.datetime(2000, 6, 1, 0, 0, tzinfo=<DstTzInfo 'Europe/Mo

我有一个代码,返回给定日期的UTC偏移量:

>>> import datetime
>>> import pytz
>>> cet = pytz.timezone("Europe/Moscow")
>>> cet.localize(datetime.datetime(2000, 6, 1))
datetime.datetime(2000, 6, 1, 0, 0, tzinfo=<DstTzInfo 'Europe/Moscow' MSD+4:00:00 DST>)
>>> int(cet.localize(datetime.datetime(2000, 6, 1)).utcoffset().seconds/60)
240

也许我做错了什么?我怎样才能在偏移量之前得到
加减(就像在jsresult中一样)

如果您打印以下内容的结果-

print(cet.localize(datetime.datetime(2000, 6, 1)).utcoffset())
您会注意到,它提供了一个既有天又有秒的
datetime.timedelta()
对象

因此,对于UTC-
时区,这实际上给出了天数
-1
,剩下的以秒为单位。范例-

In [84]: cet = pytz.timezone("America/Los_Angeles")

In [87]: cet.localize(datetime.datetime(2000, 6, 1)).utcoffset()
Out[87]: datetime.timedelta(-1, 61200)
要获取有关实际偏移量的信息,您需要同时使用
,代码如下(对于上述时区-
美国/洛杉矶
)-


另外,我相信当你在做-
newdate(2000,5,1)时
在javascript中,我认为它为您提供了今天日期与UTC的时区偏移量,而不是日期
2000/05/01
(因为对于日期-
2000/05/01
来说,正确的偏移量是您从python-
240
)获得的。您可以签出获取特定于时区以及特定于日期的偏移量等。

在我的系统上,Python和Javascript都会产生相同的结果(模符号):

并返回
-240
(不同的符号,相同的值)

Python使用:
本地时间=utc时间+utc偏移量
定义。而:
utc偏移量=utc时间-当地时间
,即两个结果都是正确的,并且对应的定义具有正确的符号

对于可移植Javascript解决方案,您可以使用提供对与
pytz
Python模块相同的tz数据库的访问的:

> var moscow = moment.tz("2000-06-01", "Europe/Moscow");
undefined
> moscow.format()
"2000-06-01T00:00:00+04:00"
In [88]: int((cet.localize(datetime.datetime(2000, 6, 1)).utcoffset().days*60*60*24 + cet.localize(datetime.datetime(2000, 6, 1)).utcoffset().seconds)/60)
Out[88]: -420
>>> from datetime import datetime, timedelta
>>> import pytz
>>> tz = pytz.timezone('Europe/Moscow')
>>> dt = tz.localize(datetime(2000, 6, 1), is_dst=None)
>>> print(dt)
2000-06-01 00:00:00+04:00
>>> dt.utcoffset() // timedelta(minutes=1)
240
> var moscow = moment.tz("2000-06-01", "Europe/Moscow");
undefined
> moscow.format()
"2000-06-01T00:00:00+04:00"