Mercurial > p > mysql-python > mysqldb-2
diff MySQLdb/times.py @ 0:e48810735f11 MySQLdb
Copying 1.2.1 to be the new trunk
author | adustman |
---|---|
date | Sun, 02 Apr 2006 18:20:53 +0000 |
parents | |
children | b5a377255eea |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MySQLdb/times.py Sun Apr 02 18:20:53 2006 +0000 @@ -0,0 +1,93 @@ +"""times module + +This module provides some Date and Time classes for dealing with MySQL data. + +Use Python datetime module to handle date and time columns.""" + +from time import localtime +from datetime import date, datetime, time, timedelta +from _mysql import string_literal + +Date = date +Time = time +TimeDelta = timedelta +Timestamp = datetime + +DateTimeDeltaType = timedelta +DateTimeType = datetime + +def DateFromTicks(ticks): + """Convert UNIX ticks into a date instance.""" + return date(*localtime(ticks)[:3]) + +def TimeFromTicks(ticks): + """Convert UNIX ticks into a time instance.""" + return time(*localtime(ticks)[3:6]) + +def TimestampFromTicks(ticks): + """Convert UNIX ticks into a datetime instance.""" + return datetime(*localtime(ticks)[:6]) + +format_TIME = format_DATE = str + +def format_TIMESTAMP(d): + return d.strftime("%Y-%m-%d %H:%M:%S") + + +def DateTime_or_None(s): + if ' ' in s: + sep = ' ' + elif 'T' in s: + sep = 'T' + else: + return Date_or_None(s) + + try: + d, t = s.split(sep, 1) + return datetime(*[ int(x) for x in d.split('-')+t.split(':') ]) + except: + return Date_or_None(s) + +def TimeDelta_or_None(s): + from math import modf + try: + h, m, s = s.split(':') + td = timedelta(hours=int(h), minutes=int(m), seconds=int(float(s)), + microseconds=int(modf(float(s))[0]*1000000)) + if h < 0: + return -td + else: + return td + except: + return None + +def Time_or_None(s): + from math import modf + try: + h, m, s = s.split(':') + return time(hour=int(h), minute=int(m), second=int(float(s)), + microsecond=int(modf(float(s))[0]*1000000)) + except: + return None + +def Date_or_None(s): + try: return date(*[ int(x) for x in s.split('-',2)]) + except: return None + +def DateTime2literal(d, c): + """Format a DateTime object as an ISO timestamp.""" + return string_literal(format_TIMESTAMP(d),c) + +def DateTimeDelta2literal(d, c): + """Format a DateTimeDelta object as a time.""" + return string_literal(format_TIME(d),c) + +def mysql_timestamp_converter(s): + """Convert a MySQL TIMESTAMP to a Timestamp object.""" + # MySQL>4.1 returns TIMESTAMP in the same format as DATETIME + if s[4] == '-': return DateTime_or_None(s) + s = s + "0"*(14-len(s)) # padding + parts = map(int, filter(None, (s[:4],s[4:6],s[6:8], + s[8:10],s[10:12],s[12:14]))) + try: return Timestamp(*parts) + except: return None