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