New Features: In Tab-View mode, Ctrl-number will take the user to
    the numbered tab view.  Modified files now show an '*' astrisk in
    the view title.  Debugger framework can now support PHP debugging.
    Not important for python development, but at least that means the
    debugger framework is more generalized.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38852 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
	
		
			
				
	
	
		
			119 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #----------------------------------------------------------------------------
 | |
| # 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
 |