2013-02-13 159 views
3

我与在它返回一个包含以下日期JSON字符串/时间API工作:Python的日期/时间格式化

2013-03-14T14:15:23-07:00 

我得到的日期和时间,精确到秒。但最后5个字符让我感到困惑。我猜这是UTC偏移量。 (山区时间)我无法弄清楚如何做的是将上面的字符串与python中的日期/时间进行比较。 T也把我扔了。

如何编码python日期/时间字符串以匹配上述?

+1

你在看[isoformat(http://docs.python.org/2/library/datetime.html#datetime.datetime.isoformat) – mgilson 2013-02-13 05:38:16

回答

2

如果使用python-dateutil库(https://crate.io/packages/python-dateutil/),则可以将该值转换为datetime

>>> dateutil.parser.parse('2013-03-14T14:15:23-07:00') 
datetime.datetime(2013, 3, 14, 14, 15, 23, tzinfo=tzoffset(None, -25200)) 
+0

好极了!这正是我需要的。我现在坚持的唯一的事情是试图以偏移量感知格式获取当前日期时间,以便我可以比较两者。我仍然试图围绕Python如何处理日期/时间来解决我的问题。 – 2013-02-14 02:05:14

+0

您应该可以在日期时间使用'.replace(tzinfo = ...)'。给它一个时区使它意识到,“无”使它天真。 – dirn 2013-02-14 05:25:40

2

您正在查看的ISO 8601日期格式。您可以使用package to parse it或自己做。

您可以使用datetime.strptime解析:

>>> ts='2013-03-14T14:15:23-07:00' 
>>> datetime.datetime.strptime(ts[0:-6],'%Y-%m-%dT%H:%M:%S') 
datetime.datetime(2013, 3, 14, 14, 15, 23) 

然后,只需加/减的增量(一个 '幼稚' 的对象):

>>> datetime.timedelta(hours=int(ts[-6:-3])) 
datetime.timedelta(-1, 61200) 

这样:

>>> d=datetime.datetime.strptime(ts[0:-6],'%Y-%m-%dT%H:%M:%S')+datetime.timedelta(hours=int(ts[-6:-3])) 
>>> d 
datetime.datetime(2013, 3, 14, 7, 15, 23) 

棘手的部分是TZ是可选的,无论您添加/减去时间偏移量还是在日期对象中设置时区。