我使用python 3.7,并试图找出正确的格式以使此代码工作

问题描述 投票:0回答:3

%z
解析指令不会在一个小时的UTC偏移量(

Docs

:需要±hhmm [ss [.ffffff]]形式)中。但是您可以从序列中得出一个时区对象,然后将其设置为

from datetime import datetime, timedelta, timezone s = "4 January 2022, 22:03 GMT-5" parts = s.split('GMT') dt = (datetime.strptime(parts[0].strip(), "%d %B %Y, %H:%M") # parse to datetime w/o offset .replace(tzinfo=timezone(timedelta(hours=int(parts[1]))))) # add UTC offset print(dt) # 2022-01-04 22:03:00-05:00
python-3.x parsing python-datetime timezone-offset
3个回答
1
投票

您使用错误的格式在本月和UTC偏移的文本无效(如

documentation
中所述,必须是四位数): >>> datetime.datetime.strptime("4 January 2022, 22:03 GMT-0500", "%d %B %Y, %H:%M %Z%z") datetime.datetime(2022, 1, 4, 22, 3, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400), 'GMT'))


我真的不喜欢当前的解决方案,因为它不够通用。如果时区为

0
投票
。 我更喜欢将时区从

UTC固定到+/-h

。 我使用的是:
+/-hhmm

0
投票
理想的解决方案是

from datetime import datetime import re def parse_date(string_date, _format): fixed_string_date = re.sub(r'[+-]\d{1,2}', '', string_date) offset = int(string_date.replace(fixed_string_date, '') or 0) fixed_string_date += f"{offset:+03d}00" if offset else "" return datetime.strptime(fixed_string_date, _format) print(parse_date("Mon, Feb 24, 2025, 09:05:00 AM UTC+10", "%a, %b %d, %Y, %I:%M:%S %p %Z%z")) print(parse_date("Sat, Jan 01, 2023, 05:43:26 PM UTC", "%a, %b %d, %Y, %I:%M:%S %p %Z")) print(parse_date("4 January 2022, 22:03 GMT-5", "%d %B %Y, %H:%M %Z%z"))

匹配1位数字偏移。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.