2024-03-28 23:55:37 发布
网友
我知道如何将字符串转换为datetime对象,但是对于具有不同时区的字符串呢?例如“10/07/2011 04:22 CEST”
您应该能够在格式字符串中使用带有%Z的strptime,但请注意Python文档中的这一注释(http://docs.python.org/library/datetime.html\strftime-strptime行为):
%Z如果tzname()返回None,%Z将替换为空字符串。否则%Z将被返回值替换,该值必须是字符串。支持的全套格式代码因平台而异,因为Python调用平台C库的strftime()函数,平台变化很常见。”
你能把时区换成偏移形式,用%z代替吗?在
EST可以表示两个不同的时区:欧洲夏季时间或东部标准时间。因此,日期时间字符串,如08/07/2011 04:22 EST是不明确的-没有可靠的方法来正确地将这些字符串转换为时区感知的日期时间。在
08/07/2011 04:22 EST
如果你愿意尝试一个可能正确的答案,那么 您可以在缩写词EST和时区名称之间生成映射,在有效的时区中随机选择,然后 然后使用该时区构建一个支持时区的日期时间:
EST
import dateutil.tz as dtz import pytz import datetime as dt import collections import random timezones = collections.defaultdict(list) for name in pytz.common_timezones: timezone = dtz.gettz(name) try: now = dt.datetime.now(timezone) except ValueError: # dt.datetime.now(dtz.gettz('Pacific/Apia')) raises ValueError continue abbrev = now.strftime('%Z') timezones[abbrev].append(name) date_string, tz_string = '10/07/2011 04:22 CEST'.rsplit(' ', 1) date = dt.datetime.strptime(date_string, '%m/%d/%Y %H:%M') print(date) # 2011-10-07 04:22:00 tz = pytz.timezone(random.choice(timezones[tz_string])) print(tz) # Europe/Oslo date = tz.localize(date) print(date) # 2011-10-07 04:22:00+02:00
您应该能够在格式字符串中使用带有%Z的strptime,但请注意Python文档中的这一注释(http://docs.python.org/library/datetime.html\strftime-strptime行为):
%Z如果tzname()返回None,%Z将替换为空字符串。否则%Z将被返回值替换,该值必须是字符串。支持的全套格式代码因平台而异,因为Python调用平台C库的strftime()函数,平台变化很常见。”
你能把时区换成偏移形式,用%z代替吗?在
EST可以表示两个不同的时区:欧洲夏季时间或东部标准时间。因此,日期时间字符串,如
08/07/2011 04:22 EST
是不明确的-没有可靠的方法来正确地将这些字符串转换为时区感知的日期时间。在如果你愿意尝试一个可能正确的答案,那么 您可以在缩写词
EST
和时区名称之间生成映射,在有效的时区中随机选择,然后 然后使用该时区构建一个支持时区的日期时间:相关问题 更多 >
编程相关推荐