“欧洲/马德里”时区与“ Etc / GMT + 1”不匹配

我正在尝试将UTC时间戳转换为西班牙时区中的时间戳。

>>> import datetime as dt
>>> import pytz
>>> today = dt.datetime.utcfromtimestamp(1573516800)
datetime.datetime(2019,11,12,0)

>>> today.replace(tzinfo=pytz.timezone('Europe/Madrid')).timestamp()
1573517700.0

>>> today.replace(tzinfo=pytz.timezone('Etc/GMT+1')).timestamp()
1573520400.0

我为Europe/MadridEtc/GMT+1获得不同的结果感到惊讶。为什么是这样? Europe/Madrid应该以不同的方式使用,还是可能是一个错误?

zj005386 回答:“欧洲/马德里”时区与“ Etc / GMT + 1”不匹配

UTC时间戳:自1970年1月1日UTC以来的秒数。

Python日期时间:用户友好的查看时间的好方法

UTC时间戳不受时区影响,但datetime受到影响。

此代码采用给定的时间戳,并将其转换为UTC日期时间和欧洲/马德里时区。

import datetime as dt
import pytz

# define the old and new timezones
old_timezone = pytz.timezone("UTC")
new_timezone = pytz.timezone("Europe/Madrid")

# get an 'offset-aware' datetime
today = dt.datetime.utcfromtimestamp(1573516800)
my_datetime = old_timezone.localize(today)

# returns datetime in the new timezone
my_datetime_in_new_timezone = my_datetime.astimezone(new_timezone)

print("Old:",str(my_datetime),"\nNew:",str(my_datetime_in_new_timezone),"\nDifference:",str(my_datetime - my_datetime_in_new_timezone))

输出:

Old: 2019-11-12 00:00:00+00:00 
New: 2019-11-12 01:00:00+01:00 
Difference: 0:00:00

代码改编自: Python: How do you convert datetime/timestamp from one timezone to another timezone?

,

几件事:

  • Europe/Madrid在标准时间是UTC + 1,在夏季时间(又名夏时制)是UTC + 2。

  • Etc/GMT+1是整年的UTC-1。请注意,该符号与您预期的相反。请参阅tzdata源和on Wikipedia中的说明。

  • 由于马德里在您提供的日期是UTC + 1,因此如果您使用Etc/GMT-1,则在该日期将获得相同的结果。但是,我不建议这样做,因为这样以后您在夏季的某个日期会得到错误的结果。

  • Etc/GMT±X区域主要用于不可定位的场景,例如跟踪海上船上的时间-不适用于陆地上的人口稠​​密位置。

  • Mason's answer所示,您应该使用localize函数而不是replace来分配时区。 in the pytz documentation对此进行了介绍。

本文链接:https://www.f2er.com/3116636.html

大家都在问