Python时区解析

标签 python date date-parsing

我在 python 中解析日期时遇到一些问题

这是我必须解析的日期:

Sun Sep 15, 2013 12:10pm EDT

这就是我用来解析它的代码:

datetime.strptime( date, "%a %b %d, %Y %I:%M%p %Z")

一切都很好,但时区解析总是返回 ValueError 异常。我也尝试过 pytz 但没有成功。

那么我如何使用 python 解析这种日期?

最佳答案

使用dateutil :

import dateutil.parser
import pytz

tz_str = '''-12 Y
-11 X NUT SST
-10 W CKT HAST HST TAHT TKT
-9 V AKST GAMT GIT HADT HNY
-8 U AKDT CIST HAY HNP PST PT
-7 T HAP HNR MST PDT
-6 S CST EAST GALT HAR HNC MDT
-5 R CDT COT EASST ECT EST ET HAC HNE PET
-4 Q AST BOT CLT COST EDT FKT GYT HAE HNA PYT
-3 P ADT ART BRT CLST FKST GFT HAA PMST PYST SRT UYT WGT
-2 O BRST FNT PMDT UYST WGST
-1 N AZOT CVT EGT
0 Z EGST GMT UTC WET WT
1 A CET DFT WAT WEDT WEST
2 B CAT CEDT CEST EET SAST WAST
3 C EAT EEDT EEST IDT MSK
4 D AMT AZT GET GST KUYT MSD MUT RET SAMT SCT
5 E AMST AQTT AZST HMT MAWT MVT PKT TFT TJT TMT UZT YEKT
6 F ALMT BIOT BTT IOT KGT NOVT OMST YEKST
7 G CXT DAVT HOVT ICT KRAT NOVST OMSST THA WIB
8 H ACT AWST BDT BNT CAST HKT IRKT KRAST MYT PHT SGT ULAT WITA WST
9 I AWDT IRKST JST KST PWT TLT WDT WIT YAKT
10 K AEST ChST PGT VLAT YAKST YAPT
11 L AEDT LHDT MAGT NCT PONT SBT VLAST VUT
12 M ANAST ANAT FJT GILT MAGST MHT NZST PETST PETT TVT WFT
13 FJST NZDT
11.5 NFT
10.5 ACDT LHST
9.5 ACST
6.5 CCT MMT
5.75 NPT
5.5 SLT
4.5 AFT IRDT
3.5 IRST
-2.5 HAT NDT
-3.5 HNT NST NT
-4.5 HLV VET
-9.5 MART MIT'''

tzd = {}
for tz_descr in map(str.split, tz_str.split('\n')):
    tz_offset = int(float(tz_descr[0]) * 3600)
    for tz_code in tz_descr[1:]:
        tzd[tz_code] = tz_offset

date = 'Sun Sep 15, 2013 12:10pm EDT'
dateutil.parser.parse(date, tzinfos=tzd) # => datetime.datetime(2013, 9, 15, 12, 10, tzinfo=tzoffset(u'EDT', -14400))

tzd生成代码来自this answer .

更新

注意 正如 Matt Johnson 所说,时区缩写列表并不准确。请参阅his answer .

关于Python时区解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18815297/

相关文章:

python - 将数组范围作为参数传递给函数?

python - 将 numpy runtimewarning 捕获为异常并抑制它们

excel - 更改日期值并保留格式

android - 如何将android中的日期选择器对话框设置为昨天的日期

python - 月/年字符串的 dateutil 解析器

python - Python 标点符号替换

python - 带参数的 GET 请求 FlasK/Rest API

java - 日期解析给出错误的值

javascript - 使用 : Y-m-d H:m:s in javascript 验证日期时间

java - Jackson 从 ISO DateTime 反序列化 Joda LocalDate