在 Python 中使用 tz.localize 将 UTC 日期时间转换为英国日期时间
Posted
技术标签:
【中文标题】在 Python 中使用 tz.localize 将 UTC 日期时间转换为英国日期时间【英文标题】:Converting UTC datetime to UK datetime using tz.localize in Python 【发布时间】:2016-08-30 00:44:47 【问题描述】:我正在尝试将 UTC 日期/时间转换为“欧洲/伦敦”时区。我曾尝试使用 tz.localize 使用日期,但我被告知日期时间并不幼稚。如果我尝试删除时区,我仍然会收到同样的错误。
基本上,我想得到这个日期: 2016 年 4 月 5 日 15:00 成为这个日期: 2016 年 4 月 5 日 14:00
我的代码如下,我使用 iso8601 解析日期。
date = 2016-05-04 15:00:00+00:00
fix_pars = iso8601.parse_date(str(date))
我尝试过使用 pytz.localize 但没有成功,因为它不喜欢我的日期已经设置了时区这一事实。
我发现这方面的文档确实令人困惑。我想要的只是一个神奇的函数,它需要一个日期并根据请求的时区进行转换。我最适合使用什么功能?
【问题讨论】:
date = 2016-05-04 15:00:00+00:00
不是有效的 Python。你为什么打电话给str(date)
? type(date)
是什么?
【参考方案1】:
import pytz
from datetime import datetime
tz = pytz.timezone('UTC')
naive_time = datetime.strptime('2016-04-05 15:00', '%Y-%m-%d %H:%M')
tz_time = tz.localize(naive_time)
london_tz = pytz.timezone('Europe/London')
london_time = tz_time.astimezone(london_tz)
这是我的输出:
>>> print tz_time
2016-04-05 15:00:00+00:00
>>> print london_time
2016-04-05 16:00:00+01:00
【讨论】:
将我的代码修改为:date = '2016-06-11 16:00:00+00:00' naive_time = datetime.strptime(date, '%Y-%m-%d %H :%M') tz_time = tz.localize(naive_time) london_time = tz_time.astimezone(london_tz) 但我得到... data_string[found.end():]) ValueError: 未转换的数据仍然存在: :00+00:00 @LemusThelroy 您必须将其转换为字符串,然后从中删除时区:str(theTime)[:-6]
,然后如果您想更新 naive_time
变量以包含秒数 naive_time = datetime.strptime(str(theTime)[:-6], '%Y-%m-%d %H:%M:%S')
如果我想将 london_time 转换为 dd/mm/yyyy hh:mm 格式,我应该使用什么函数?然后我会去阅读这方面的文档。
@LemusThelroy 您仍然可以使用strptime 方法。您只需编辑格式化字符串即可:naive_time = datetime.strptime('05/04/2016 15:00', '%d/%m/%Y %H:%M')
【参考方案2】:
您不需要 tz.localize
与 utc 时区,因为它具有固定的 utc 偏移量(零)。如果您有 timezone-aware 日期时间对象(如其文本表示所示),则将其转换为 Europe/London
时区:
london_dt = aware_dt.astimezone(pytz.timezone('Europe/London'))
仅此而已。
【讨论】:
以上是关于在 Python 中使用 tz.localize 将 UTC 日期时间转换为英国日期时间的主要内容,如果未能解决你的问题,请参考以下文章
当python使用“Python.h”调用该c++进程时,如何在python中停止一个c++进程
在 python 中使用 soffice,Command 在终端中有效,但在 Python 子进程中无效