【问题标题】:Parsing string into datetime in Python在 Python 中将字符串解析为日期时间
【发布时间】:2015-08-09 02:12:24
【问题描述】:

我有一个使用这种格式的日期

October 14, 2014 1:35PM PDT

我的 python 脚本中有这个

import time

u_date = 'October 14, 2014 1:35PM PDT'

print  time.strptime(u_date,"%b %d, %y %I:%M%p %Z")

结果我得到了这个错误

ValueError: time data u'October 14, 2014 1:35PM PDT' does not match format '%b %d, %y %I:%M%p %Z'

谁能向我解释为什么会这样?我是 python 新手,任何帮助将不胜感激。

【问题讨论】:

标签: python date datetime time


【解决方案1】:

您的格式不正确; %b 需要一个缩写月份,但是您有一个完整的月份,需要%B,并且您有一个完整的 4 位数年份,所以使用%Y,不是%y

time 库无法解析时区,但是,您必须在此处删除 %Z 部分并删除最后一个字符才能使其正常工作:

>>> time.strptime(u_date[:-4], "%B %d, %Y %I:%M%p")
time.struct_time(tm_year=2014, tm_mon=10, tm_mday=14, tm_hour=13, tm_min=35, tm_sec=0, tm_wday=1, tm_yday=287, tm_isdst=-1)

您可以改用dateutil library 来解析完整的字符串,它会生成datetime.datetime object 而不是时间结构:

>>> from dateutil import parser
>>> parser.parse(u_date)
datetime.datetime(2014, 10, 14, 13, 35)

【讨论】:

  • time.strptime('October 14, 2014 1:35PM PDT', "%B %d, %Y %I:%M%p %Z") 如果您的本地时区是 America/Los_Angeles 有效。否则,诸如 PDT 之类的时区缩写可能不明确,parser.parse() 可能会返回错误的结果(错误的区域名称、错误的 utc 偏移量)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
  • 2012-04-01
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 2019-03-24
相关资源
最近更新 更多