@@ -368,15 +368,17 @@ class BooleanType(AtomicType, metaclass=DataTypeSingleton):
368
368
369
369
pass
370
370
371
+ class DatetimeType (AtomicType ):
372
+ """Super class of ass datetime data type."""
373
+ def needConversion (self ) -> bool :
374
+ return True
375
+
371
376
372
- class DateType (AtomicType , metaclass = DataTypeSingleton ):
377
+ class DateType (DatetimeType , metaclass = DataTypeSingleton ):
373
378
"""Date (datetime.date) data type."""
374
379
375
380
EPOCH_ORDINAL = datetime .datetime (1970 , 1 , 1 ).toordinal ()
376
381
377
- def needConversion (self ) -> bool :
378
- return True
379
-
380
382
def toInternal (self , d : datetime .date ) -> int :
381
383
if d is not None :
382
384
return d .toordinal () - self .EPOCH_ORDINAL
@@ -386,15 +388,16 @@ def fromInternal(self, v: int) -> datetime.date:
386
388
return datetime .date .fromordinal (v + self .EPOCH_ORDINAL )
387
389
388
390
389
- class TimeType (AtomicType ):
391
+ class AnyTimeType (DatetimeType ):
392
+ """A TIME type of any valid precision."""
393
+ pass
394
+
395
+ class TimeType (AnyTimeType ):
390
396
"""Time (datetime.time) data type."""
391
397
392
398
def __init__ (self , precision : int = 6 ):
393
399
self .precision = precision
394
400
395
- def needConversion (self ) -> bool :
396
- return True
397
-
398
401
def toInternal (self , t : datetime .time ) -> int :
399
402
if t is not None :
400
403
return (
@@ -422,12 +425,9 @@ def __repr__(self) -> str:
422
425
return "TimeType(%d)" % (self .precision )
423
426
424
427
425
- class TimestampType (AtomicType , metaclass = DataTypeSingleton ):
428
+ class TimestampType (DatetimeType , metaclass = DataTypeSingleton ):
426
429
"""Timestamp (datetime.datetime) data type."""
427
430
428
- def needConversion (self ) -> bool :
429
- return True
430
-
431
431
def toInternal (self , dt : datetime .datetime ) -> int :
432
432
if dt is not None :
433
433
seconds = (
@@ -441,12 +441,9 @@ def fromInternal(self, ts: int) -> datetime.datetime:
441
441
return datetime .datetime .fromtimestamp (ts // 1000000 ).replace (microsecond = ts % 1000000 )
442
442
443
443
444
- class TimestampNTZType (AtomicType , metaclass = DataTypeSingleton ):
444
+ class TimestampNTZType (DatetimeType , metaclass = DataTypeSingleton ):
445
445
"""Timestamp (datetime.datetime) data type without timezone information."""
446
446
447
- def needConversion (self ) -> bool :
448
- return True
449
-
450
447
@classmethod
451
448
def typeName (cls ) -> str :
452
449
return "timestamp_ntz"
0 commit comments