def parse(self, value, property, context):
value = value.strip()
m = self.PATTERN1.match(value)
if m is None:
if issubclass(property, Time):
m = self.PATTERN2.match(value)
if m is None:
raise ValueError()
else:
raise ValueError()
if m.groupdict().get('Y'):
date = datetime.date(*map(lambda x: 1 if x is None else int(x), m.group('Y', 'm', 'd')))
else:
date = datetime.date.fromtimestamp(0)
if issubclass(property, Date):
return date
if m.group('H'):
hour, min, sec = m.group('H', 'M', 'S')
hour = int(hour)
min = int(min) if min else 0
sec = float(sec) if sec else 0.0
time = datetime.time(hour, min, int(sec), int((sec % 1.0) * 1000000))
else:
time = datetime.time()
if m.group('tzd'):
if m.group('tzd') in ('Z', '+00:00', '-00:00'):
tzinfo = timezone.utc
else:
offset = int(m.group('tzh')) * 60 + int(m.group('tzm'))
if m.group('tzd').startswith('-'):
offset = -offset
tzinfo = timezone(datetime.timedelta(minutes=offset))
time = time.replace(tzinfo=tzinfo)
if issubclass(property, Time):
return time
return datetime.datetime.combine(date, time)
评论列表
文章目录