为什么 Python 的 time.timezone 返回错误的偏移秒数?



为什么python的时间。TimeZone返回错误的偏移秒?

我正在处理位于不同时区域的两个服务器。这两个服务器的时区设置似乎都不错(请忽略两个服务器之间的微小时间差(:

在中国服务器上的"日期"命令(中国标准时间,UTC 8(:

$ date ; date -u ; date '+%Z (%:::z)'
Fri Mar 30 17:52:06 CST 2018
Fri Mar 30 09:52:06 UTC 2018
CST (+08)

在美国服务器上的"日期"命令(中央日光时间,UTC-5(:

$ date ; date -u ; date '+%Z (%:::z)'
Fri Mar 30 04:56:52 CDT 2018
Fri Mar 30 09:56:52 UTC 2018
CDT (-05)

但是当我使用Python的时间时。TimeZone获取偏移秒数,它返回了美国服务器的错误号码,但与中国正确:

python在中国服务器上运行结果(正确的时间。时区(:

$ python
Python 2.7.5 (default, Nov  6 2016, 00:28:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from datetime import datetime as dt
>>> from datetime import timedelta
>>> import time
>>> print dt.now()
2018-03-30 17:45:51.661311
>>> print dt.utcnow()
2018-03-30 09:45:51.661738
>>> print time.timezone
-28800  # This is -8 hours
>>> utc_time_delta = timedelta(seconds=time.timezone) ; print utc_time_delta;
-1 day, 16:00:00
>>>

python在美国服务器上运行结果(不正确 time.time.timezone(:

$ python
Python 2.7.12 (default, Dec  4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from datetime import datetime as dt
>>> from datetime import timedelta
>>> import time
>>> print dt.now()
2018-03-30 04:50:36.261980
>>> print dt.utcnow()
2018-03-30 09:50:36.262212
>>> print time.timezone
21600  # This is +6 hours (incorrect)
>>> utc_time_delta = timedelta(seconds=time.timezone) ; print utc_time_delta;
6:00:00
>>>

为什么会这样?白天时间和标准时间有问题吗?

此外,如何以没有PYTZ的特定时区偏移以人类可读格式显示DateTime值?(我不是该服务器的管理员,所以我无法安装PYTZ(

我之所以使用时间。TimeZone是我想阅读一个时代号码(按照惯例,它始终在UTC中(,然后在当地的美国时间和中国时间进行打印。

>>> time_epoch_str = '1522401308'
>>> time_dt = dt.fromtimestamp(int(time_epoch_str))
>>> utc_time_delta = timedelta(seconds=time.timezone)
>>> china_time_delta = utc_time_delta + timedelta(hours=8)
>>> print("U.S.A. time: %s; UTC time: %s; China time: %s" 
... % (time_dt, time_dt + utc_time_delta, time_dt + china_time_delta))
U.S.A. time: 2018-03-30 04:15:08; UTC time: 2018-03-30 10:15:08; China time: 2018-03-30 18:15:08

但显示出错误的结果,时代的正确时间1522401308为:

GMT: Friday, March 30, 2018 9:15:08 AM
Your time zone: Friday, March 30, 2018 5:15:08 PM GMT+08:00

要获得时间的实际时区,则必须使用" time"实例的" tm_dst"。

此答案的原始版本建议使用" time.daylight",但是此标志是恒定的,不会改变。它告诉" Altzone"(日光节省时间偏移量(是否设置了,一旦设置为" Time.daylight"总是" 1",无论当前时间是否是日光保存时间。

要获得正确的时间偏移,您应该使用以下代码:

t = time.localtime()
if t.tm_isdst == 0:
    tz_offset = time.timezone
else:
    tz_offset = time.altzone

以下是原始答案:

哈哈哈,终于我发现了我错过的东西。我应该更仔细地看一下Python Doc。

检查以下python文档:https://docs.python.org/2/library/time.html#time.altzone

这确实是节省日光时间的问题。我应该将代码更改为:

if time.daylight == 0:
    utc_time_delta = timedelta(seconds=time.timezone)
else:
    utc_time_delta = timedelta(seconds=time.altzone)

" time.timezone"不会自动更改,但" time.daylight"更改。

相关内容

  • 没有找到相关文章

最新更新