Python与JavaScript的Unix时间转换

3 投票
2 回答
1733 浏览
提问于 2025-04-18 16:50

在JavaScript中:

new Date(2014, 5, 1).getTime()
// results: 1401561000000

而在Python中:

import time
import datetime
time.mktime(datetime.datetime(2014, 5 , 1).timetuple())
# results -> 1398882600.0

我该如何把Python的时间转换成JavaScript的Unix时间戳呢?

2 个回答

1

JavaScript中的时间计算是从0开始算月份的。这意味着如果你想在JavaScript中表示四月,你输入的月份会是错误的。

要让你的JavaScript和Python中的月份表示一致,你可以这样做:

var time = new Date(2014, 4, 1).getTime()/1000;
// time = 1398916800
3

让我们来比较一下这两个结果:

  1. JavaScript: 1401561000 – 2014年5月31日 18:30:00 UTC(注意,getTime() 返回的是毫秒数,所以你需要把它除以1000)
  2. Python: 1398882600 – 2014年4月30日 18:30:00 UTC

所以实际上有两个问题:

首先,在JavaScript中,月份的索引是从 0 开始的(0 = 一月),而在Python中是从 1 开始的(1 = 一月)。这就是为什么会有一个月的差距。

第二个问题是由于时区造成的。你的本地时间似乎是 UTC-05:30,这就是差距的来源。当你在任一语言中创建日期时,使用的总是本地时间,所以时区的偏差会被考虑进去。如果你想输入UTC时间,也可以做到。在JavaScript中,这很简单,因为有 Date.UTC

Date.UTC(2014, 5, 1) / 1000 // 1401580800
Date.UTC(2014, 4, 1) / 1000 // 1398902400

而在Python中,情况就复杂一些,因为 datetime 对象默认是不考虑时区的,但 time.mktime 假设传入的元组是本地时间。要解决这个问题,你可以通过明确指定时区来让 datetime 对象考虑时区,或者自己进行计算:

>>> datetime.datetime(2014, 6, 1, tzinfo=timezone.utc).timestamp()
1401580800.0
>>> datetime.datetime(2014, 5, 1, tzinfo=timezone.utc).timestamp()
1398902400.0

>>> (datetime.datetime(2014, 6, 1) - datetime.datetime(1970, 1, 1)) / datetime.timedelta(seconds=1)
1401580800.0
>>> (datetime.datetime(2014, 5, 1) - datetime.datetime(1970, 1, 1)) / datetime.timedelta(seconds=1)
1398902400.0

撰写回答