如何用Python strftime格式化带时区偏移的datetime对象?
解决Python时区datetime格式化问题
首先,你的核心需求是获取时区偏移后的纯时间字符串,问题可能出在时区转换逻辑或格式化方式上,以下是具体解决方案:
1. 确认时区转换的正确性
Unix时间戳基于UTC,正确转换为Europe/Bratislava时区的代码如下:
import datetime import pytz timestamp = 1658123953 # 方式一:直接用fromtimestamp指定目标时区 dt = datetime.datetime.fromtimestamp(timestamp, tz=pytz.timezone('Europe/Bratislava')) # 方式二:先转UTC再切换到目标时区 dt_utc = datetime.datetime.utcfromtimestamp(timestamp).replace(tzinfo=pytz.utc) dt = dt_utc.astimezone(pytz.timezone('Europe/Bratislava'))
这两种方式得到的dt是datetime.datetime(2022, 7, 18, 7, 59, 13, tzinfo=<DstTzInfo 'Europe/Bratislava' CEST+2:00:00 DST>),这个时间本身就是已加上时区偏移的当地时间(UTC时间为05:59:13,加2小时后得到07:59:13)。
2. 正确格式化得到纯时间字符串
如果用strftime('%H:%M:%S')格式化上述正确的dt,会直接输出07:59:13——这就是你需要的时区偏移后的纯时间结果。
若你当前输出是07:59:13 +02:00,说明你使用的格式化字符串是'%H:%M:%S %z',去掉%z即可只保留时间部分。
3. 若确实需要得到09:59:13
如果目标是得到比当前dt再偏移2小时的时间,可手动调整:
# 手动添加2小时 dt_adjusted = dt + datetime.timedelta(hours=2) print(dt_adjusted.strftime('%H:%M:%S')) # 输出09:59:13
内容的提问来源于stack exchange,提问作者Tomáš Michalík
相关产品推荐
相关产品推荐

