Returns a DATETIME or TIMESTAMP column value as a datetime object: >>> convert_datetime('2007-02-25 23:06:20') datetime.datetime(2007, 2, 25, 23, 6, 20) >>> convert_datetime('2007-02-25T23:06:20') datetime.datetime(2007, 2, 25, 23, 6, 20) Illegal values are returned as
(obj)
| 159 | |
| 160 | |
| 161 | def convert_datetime(obj): |
| 162 | """Returns a DATETIME or TIMESTAMP column value as a datetime object: |
| 163 | |
| 164 | >>> convert_datetime('2007-02-25 23:06:20') |
| 165 | datetime.datetime(2007, 2, 25, 23, 6, 20) |
| 166 | >>> convert_datetime('2007-02-25T23:06:20') |
| 167 | datetime.datetime(2007, 2, 25, 23, 6, 20) |
| 168 | |
| 169 | Illegal values are returned as str: |
| 170 | |
| 171 | >>> convert_datetime('2007-02-31T23:06:20') |
| 172 | '2007-02-31T23:06:20' |
| 173 | >>> convert_datetime('0000-00-00 00:00:00') |
| 174 | '0000-00-00 00:00:00' |
| 175 | """ |
| 176 | if isinstance(obj, (bytes, bytearray)): |
| 177 | obj = obj.decode("ascii") |
| 178 | |
| 179 | m = DATETIME_RE.match(obj) |
| 180 | if not m: |
| 181 | return convert_date(obj) |
| 182 | |
| 183 | try: |
| 184 | groups = list(m.groups()) |
| 185 | groups[-1] = _convert_second_fraction(groups[-1]) |
| 186 | return datetime.datetime(*[int(x) for x in groups]) |
| 187 | except ValueError: |
| 188 | return convert_date(obj) |
| 189 | |
| 190 | |
| 191 | TIMEDELTA_RE = re.compile(r"(-)?(\d{1,3}):(\d{1,2}):(\d{1,2})(?:.(\d{1,6}))?") |
nothing calls this directly
no test coverage detected