如何在python中将时区添加到原始datetime实例中
我有一个没有时区信息的如何在python中将时区添加到原始datetime实例中,python,datetime,timezone,pytz,Python,Datetime,Timezone,Pytz,我有一个没有时区信息的datetime。我现在正在获取时区信息,希望将时区添加到现有的datetime实例中,我该怎么做 d = datetime.datetime.now() tz = pytz.timezone('Asia/Taipei') 如何将时区信息tz添加到datetimea使用tz.localize(d)来本地化实例。从: 第一种方法是使用pytz库提供的localize()方法。这用于本地化原始日期时间(没有时区信息的日期时间): 如果不使用tz.localize(),而是使用
datetime
。我现在正在获取时区信息,希望将时区添加到现有的datetime实例中,我该怎么做
d = datetime.datetime.now()
tz = pytz.timezone('Asia/Taipei')
如何将时区信息tz
添加到datetimea
使用tz.localize(d)
来本地化实例。从:
第一种方法是使用pytz库提供的localize()方法。这用于本地化原始日期时间(没有时区信息的日期时间):
如果不使用tz.localize()
,而是使用datetime.replace()
,那么很可能会使用历史偏移量tz.localize()
将选择给定日期有效的正确偏移量。例如,美国东部时区DST开始和结束日期随时间而变化
当您试图本地化一个不明确的日期时间值时,因为它跨越了从夏季到冬季的过渡期,反之亦然,将查询时区,以查看生成的datetime对象是否应该有.dst()
返回True或False。您可以使用.localize()
的isdst
关键字参数覆盖时区的默认值:
甚至通过设置isdst=None
来完全关闭选项。在这种情况下,或者在极少数情况下,没有时区的默认设置,不明确的datetime值将导致引发不明确的错误
异常。is_dst
标志仅用于不明确的日期时间值,否则将被忽略
要返回到另一种方式,请使用.replace(tzinfo=None)
将时区感知对象返回到原始对象:
使用tz.localize(d)
对实例进行本地化。从:
第一种方法是使用pytz库提供的localize()方法。这用于本地化原始日期时间(没有时区信息的日期时间):
如果不使用tz.localize()
,而是使用datetime.replace()
,那么很可能会使用历史偏移量tz.localize()
将选择给定日期有效的正确偏移量。例如,美国东部时区DST开始和结束日期随时间而变化
当您试图本地化一个不明确的日期时间值时,因为它跨越了从夏季到冬季的过渡期,反之亦然,将查询时区,以查看生成的datetime对象是否应该有.dst()
返回True或False。您可以使用.localize()
的isdst
关键字参数覆盖时区的默认值:
甚至通过设置isdst=None
来完全关闭选项。在这种情况下,或者在极少数情况下,没有时区的默认设置,不明确的datetime值将导致引发不明确的错误
异常。is_dst
标志仅用于不明确的日期时间值,否则将被忽略
要返回到另一种方式,请使用.replace(tzinfo=None)
将时区感知对象返回到原始对象:
如果您知道您的原始日期时间是在您试图添加到它的时区中“测量”的,那么您可以(但可能不应该)使用
replace
,而不是localize
# d = datetime.datetime.now()
# tz = pytz.timezone('Asia/Taipei')
d = d.replace(tzinfo=tz)
我可以想象有两次这可能是有意义的(第二次发生在我身上):
datetime
实例知道这个不正确的时区来纠正它(可能以后会将其定位到“正确”的时区,以便now()的值与您比较它的其他时间相匹配(可能是您的手表)time
实例(NOTadatetime
),以便以后可以使用该属性来形成一个完整的datetime
实例如果您知道您的原始日期时间是在您试图添加到它的时区中“测量”的,那么您可以(但可能不应该)使用
replace
,而不是localize
# d = datetime.datetime.now()
# tz = pytz.timezone('Asia/Taipei')
d = d.replace(tzinfo=tz)
我可以想象有两次这可能是有意义的(第二次发生在我身上):
datetime
实例知道这个不正确的时区来纠正它(可能以后会将其定位到“正确”的时区,以便now()的值与您比较它的其他时间相匹配(可能是您的手表)time
实例(NOTadatetime
),以便以后可以使用该属性来形成一个完整的datetime
实例有没有什么方便的方法可以从包含tzinfo的
datetime
中获取原始的datetime
?@waitingkuo:call.replace(tzinfo=None)datetime
对象上的
。返回值是一个简单的datetime
实例。is_dst
参数值得一提,用于解决不明确的时间或断言当时没有dst转换。@hobs:我不希望本地化适用于time
对象,不,因为本地化需要date无法正确执行其工作。时区偏移对于时间组件来说毫无意义,您缺少DST和历史上下文的信息。@hobs:使用是错误的。请将()
替换为可能具有多个utc偏移的pytz
时区(许多时区都有)。默认的tzinfo对象通常对应于LMT(太阳时)在大多数情况下,这不是你想要的(我认为默认值背后的理由是帮助揭示不正确的.replace()
用法)。有没有方便的方法来获取原始的日期时间
naivedt = awaredt.replace(tzinfo=None)
# d = datetime.datetime.now()
# tz = pytz.timezone('Asia/Taipei')
d = d.replace(tzinfo=tz)