Viewing file: TimeLib.py (2.5 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
import re from datetime import time #Regexen from Mark Nottingham (http://www.mnot.net/python/isodate.py) DATETIME_PAT = re.compile(r""" (?P<year>\d{4,4}) (?: - (?P<month>\d{1,2}) (?: - (?P<day>\d{1,2}) (?: T (?P<hour>\d{1,2}) : (?P<minute>\d{1,2}) (?: : (?P<second>\d{1,2}) (?: \. (?P<fract_second>\d+)? )? )? (?: Z | (?: (?P<tz_sign>[+-]) (?P<tz_hour>\d{1,2}) : (?P<tz_min>\d{2,2}) ) ) )? )? )? $""", re.VERBOSE)
TIME_PAT = re.compile(r""" (?P<hour>\d{1,2}) : (?P<minute>\d{1,2}) (?: : (?P<second>\d{1,2}) (?: \. (?P<fract_second>\d+)? )? )? (?: Z | (?: (?P<tz_sign>[+-]) (?P<tz_hour>\d{1,2}) : (?P<tz_min>\d{2,2}) ) ) $""", re.VERBOSE)
def parse_isodate(st): """ st - string or Unicode with ISO 8601 date """ m = DATETIME_PAT.match(st) if not m: return None gd = m.groupdict('0') #FIXME: does not handle time zones dt = datetime(int(gd['year']), int(gd['month']) or 1, int(gd['day']) or 1, int(gd['hour']), int(gd['minute']), int(gd['second']), int(float(u'.' + gd['fract_second'])*1000000), ) return dt
def parse_isotime(st): """ st - string or Unicode with ISO 8601 time """ m = TIME_PAT.match(st) if not m: return None gd = m.groupdict('0') #FIXME: does not handle time zones t = time(int(gd['hour']), int(gd['minute']), int(gd['second']), int(float(u'.' + gd['fract_second'])*1000000), ) return t
|