在python中time.mktime时区是免费的吗?

在python中time.mktime时区是免费的吗?,python,datetime,time,timezone,epoch,Python,Datetime,Time,Timezone,Epoch,我试图理解这个时代的本质,以及它的行为。下面,我用2个不同时区的datetime和1个naive datetime尝试了相同的日期 import time import pytz from datetime import datetime, timedelta pst = pytz.timezone('America/Los_Angeles') t = datetime(year=2015, month=2, day=2) t = pst.localize(t) time.mktime(t.t

我试图理解这个时代的本质,以及它的行为。下面,我用2个不同时区的datetime和1个naive datetime尝试了相同的日期

import time
import pytz
from datetime import datetime, timedelta

pst = pytz.timezone('America/Los_Angeles')
t = datetime(year=2015, month=2, day=2)
t = pst.localize(t)
time.mktime(t.timetuple()) 
# outputs 1422864000.0


utc = pytz.utc
k = datetime(year=2015, month=2, day=2)
k = utc.localize(k)
time.mktime(k.timetuple())
# outputs 1422864000.0




o = datetime(year=2015, month=2, day=2)
time.mktime(o.timetuple())
# outputs 1422864000.0
它们都有相同的历元,但这令人惊讶,因为pst中的相同日期相对于utc应该偏移7小时。有人能解释一下吗

感谢

time.mktime()
返回相同的结果,因为它在所有三种情况下几乎(~
isdst
)接收相同的输入:

time.struct_time(tm_year=2015, tm_mon=2, tm_mday=2, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=33, ..)
.timetuple()
不存储utc偏移量。它相当于朴素的
datetime
对象

通常,“历元”即“历元后的秒数”不取决于时区。既不是当地时间也不是utc。了解时间戳可以使用
datetime.fromtimestamp
datetime.utcfromtimestamp
相应地获得

如果您的本地时区不同于
“美国/洛杉矶”
(不同的utc偏移量),则所有三个时间实例都不同,因此所有三个POSIX时间戳都不同:

#!/usr/bin/env python3
from datetime import datetime
import pytz # $ pip install pytz

pacific = pytz.timezone('America/Los_Angeles')
naive  = datetime(2015, 2, 2)
pacific_dt = pacific.localize(naive, is_dst=None)
print(pacific_dt.timestamp())

utc_dt = naive.replace(tzinfo=pytz.utc)
print(utc_dt.timestamp())

print(naive.timestamp()) #NOTE: interpret as local time
最后一个调用可以在内部使用
mktime(naive.timetuple())

输出 注意:所有三个时间戳都不同


要在较旧的Python版本上获取POSIX时间戳,请参阅。

是否尝试运行
帮助(time.mktime)
?tl;dr
help(time.mktime)
输出:
将本地时间中的时间元组转换为自历元起的秒数。
这意味着,不,它不关心哪个时区,它假定其为本地时间。@TehTris那么,最终历元本地时间是否已调整?还是总是utc?
1422864000.0
1422835200.0
1422831600.0