X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ea5449ae514c2eba0dae9828cbed53b902b52d89..aca310e5cc45db153540efe2df577d8f985ccfc1:/wxPython/samples/ide/activegrid/util/datetimeparser.py diff --git a/wxPython/samples/ide/activegrid/util/datetimeparser.py b/wxPython/samples/ide/activegrid/util/datetimeparser.py new file mode 100644 index 0000000000..3731658c98 --- /dev/null +++ b/wxPython/samples/ide/activegrid/util/datetimeparser.py @@ -0,0 +1,118 @@ +#---------------------------------------------------------------------------- +# Name: datetimeparser.py +# +# Purpose: - Instantiate datetime.datetime/date instance from a string +# date representation. +# Uses dateutil from http://labix.org/python-dateutil. +# +# - Creates string representation of datetime/date instance. +# +# +# Author: Simon Toens +# +# Created: 28-Feb-06 +# CVS-ID: +# Copyright: (c) 2005 ActiveGrid, Inc. +# License: wxWindows License +#---------------------------------------------------------------------------- + +import datetime + +try: + import dateutil.parser + DATEUTIL_INSTALLED = True +except ImportError: + DATEUTIL_INSTALLED = False + +ISO_8601_DATE_FORMAT = "%Y-%m-%d" +ISO_8601_TIME_FORMAT = "%H:%M:%S" +ISO_8601_DATETIME_FORMAT = "%s %s" %(ISO_8601_DATE_FORMAT, + ISO_8601_TIME_FORMAT) + +DEFAULT_DATETIME = datetime.datetime(1, 1, 1, 0, 0, 0, 0) + + +def format(dateobj, formatstr=None): + if (formatstr != None and _isDateTimeObject(dateobj)): + return dateobj.strftime(str(formatstr)) + return str(dateobj) + + +def parse(datestr, formatstr=None, asdate=False, astime=False): + """Instantiates and returns a datetime instance from the datestr datetime + representation. + + Optionally, a format string may be used. The format is only loosely + interpreted, its only purpose beeing to determine if the year is first + or last in datestr, and whether the day is in front or follows the + month. If no formatstr is passed in, dateutil tries its best to parse + the datestr. The default date format is YYYY-mm-dd HH:SS. + + If asdate is True, returns a date instance instead of a datetime + instance, if astime is True, returns a time instance instead of a + datetime instance.""" + + + dayfirst, yearfirst = _getDayFirstAndYearFirst(formatstr) + + rtn = None + + try: + if DATEUTIL_INSTALLED: + rtn = dateutil.parser.parse(str(datestr), fuzzy=True, + dayfirst=dayfirst, yearfirst=yearfirst, + default=DEFAULT_DATETIME) + else: + rtn = DEFAULT_DATETIME + except: + rtn = DEFAULT_DATETIME + + if (asdate and isinstance(rtn, datetime.datetime)): + rtn = datetime.date(rtn.year, rtn.month, rtn.day) + elif (astime and isinstance(rtn, datetime.datetime)): + rtn = datetime.time(rtn.hour, rtn.minute, rtn.second, rtn.microsecond) + + return rtn + + +def _isDateTimeObject(obj): + return (isinstance(obj, datetime.datetime) or + isinstance(obj, datetime.date) or + isinstance(obj, datetime.time)) + + +def _getDayFirstAndYearFirst(formatstr): + dayFirst = False + yearFirst = False + + gotYear = False + gotMonth = False + gotDay = False + + if (formatstr == None): + formatstr = "" + + for c in formatstr: + if (c.lower() == "y"): + if (gotYear): + continue + if (not gotDay and not gotMonth): + yearFirst = True + gotYear = True + + elif (c.lower() == "m"): + if (gotMonth): + continue + if (not gotDay): + dayFirst = False + gotMonth = True + + elif (c.lower() == "d"): + if (gotDay): + continue + if (not gotMonth): + dayFirst = True + gotDay = True + + + return dayFirst, yearFirst