Skip to content

Commit 5b67a79

Browse files
committed
make all datetime types consistent with JVM type classes
1 parent 2ad1338 commit 5b67a79

File tree

1 file changed

+13
-16
lines changed

1 file changed

+13
-16
lines changed

python/pyspark/sql/types.py

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -368,15 +368,17 @@ class BooleanType(AtomicType, metaclass=DataTypeSingleton):
368368

369369
pass
370370

371+
class DatetimeType(AtomicType):
372+
"""Super class of ass datetime data type."""
373+
def needConversion(self) -> bool:
374+
return True
375+
371376

372-
class DateType(AtomicType, metaclass=DataTypeSingleton):
377+
class DateType(DatetimeType, metaclass=DataTypeSingleton):
373378
"""Date (datetime.date) data type."""
374379

375380
EPOCH_ORDINAL = datetime.datetime(1970, 1, 1).toordinal()
376381

377-
def needConversion(self) -> bool:
378-
return True
379-
380382
def toInternal(self, d: datetime.date) -> int:
381383
if d is not None:
382384
return d.toordinal() - self.EPOCH_ORDINAL
@@ -386,15 +388,16 @@ def fromInternal(self, v: int) -> datetime.date:
386388
return datetime.date.fromordinal(v + self.EPOCH_ORDINAL)
387389

388390

389-
class TimeType(AtomicType):
391+
class AnyTimeType(DatetimeType):
392+
"""A TIME type of any valid precision."""
393+
pass
394+
395+
class TimeType(AnyTimeType):
390396
"""Time (datetime.time) data type."""
391397

392398
def __init__(self, precision: int = 6):
393399
self.precision = precision
394400

395-
def needConversion(self) -> bool:
396-
return True
397-
398401
def toInternal(self, t: datetime.time) -> int:
399402
if t is not None:
400403
return (
@@ -422,12 +425,9 @@ def __repr__(self) -> str:
422425
return "TimeType(%d)" % (self.precision)
423426

424427

425-
class TimestampType(AtomicType, metaclass=DataTypeSingleton):
428+
class TimestampType(DatetimeType, metaclass=DataTypeSingleton):
426429
"""Timestamp (datetime.datetime) data type."""
427430

428-
def needConversion(self) -> bool:
429-
return True
430-
431431
def toInternal(self, dt: datetime.datetime) -> int:
432432
if dt is not None:
433433
seconds = (
@@ -441,12 +441,9 @@ def fromInternal(self, ts: int) -> datetime.datetime:
441441
return datetime.datetime.fromtimestamp(ts // 1000000).replace(microsecond=ts % 1000000)
442442

443443

444-
class TimestampNTZType(AtomicType, metaclass=DataTypeSingleton):
444+
class TimestampNTZType(DatetimeType, metaclass=DataTypeSingleton):
445445
"""Timestamp (datetime.datetime) data type without timezone information."""
446446

447-
def needConversion(self) -> bool:
448-
return True
449-
450447
@classmethod
451448
def typeName(cls) -> str:
452449
return "timestamp_ntz"

0 commit comments

Comments
 (0)