如何解析日期与python-0400时区字符串

如题所述

1. 你从dateutil的parse函数:>>> from dateutil.parser import parse
>>> d = parse('2009/05/13 19:19:30 -0400')
>>> d
datetime.datetime(2009, 5, 13, 19, 19, 30, tzinfo=tzoffset(None, -14400))

这样你得到一个对象,你可以 更新:由于回答dateutil2.0为python3.0写,不与python2.x工作。对于python2.x dateutil1.5需要
2. 简短的回答是这是行不通的。较长的答案-你应该看到这个问题的答案: python年龄第2部分,
3. 如果你是在Linux上,那么你的外部date命令DWIM:import commands, datetime
def parsedate(text):
output=commands.getoutput('date -d "%s" +%%s' % text )
try:
stamp=eval(output)
except:
print output
raise
return datetime.datetime.frometimestamp(stamp)

这当然是移植性较差的dateutil,但稍微更灵活,date也将接受像“昨天”或“去年”:-)投入
4. 问题dateutil是 CodeGo.net,你不能有格式字符串的序列化和反序列化,因为dateutil具有有限的格式选项(仅适用于dayfirst和yearfirst)。 在我的应用程序,我存储在。ini文件的格式字符串,每个人都可以有它自己的格式。我真的不喜欢dateutil方法。 下面是一个pytz来代替:from datetime import datetime, timedelta
from pytz import timezone, utc
from pytz.tzinfo import StaticTzInfo
class OffsetTime(StaticTzInfo):
def __init__(self, offset):
"""A dumb timezone based on offset such as +0530, -0600, etc.
"""
hours = int(offset[:3])
minutes = int(offset[0] + offset[3:])
self._utcoffset = timedelta(hours=hours, minutes=minutes)
def load_datetime(value, format):
if format.endswith('%z'):
format = format[:-2]
offset = value[-5:]
value = value[:-5]
return OffsetTime(offset).localize(datetime.strptime(value, format))
return datetime.strptime(value, format)
def dump_datetime(value, format):
return value.strftime(format)
value = '2009/05/13 19:19:30 -0400'
format = '%Y/%m/%d %H:%M:%S %z'
assert dump_datetime(load_datetime(value, format), format) == value
assert datetime(2009, 5, 13, 23, 19, 30, tzinfo=utc) \
.astimezone(timezone('US/Eastern')) == load_datetime(value, format)
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答