Skip to content

type_bridge.attribute.datetime

datetime

DateTime attribute type for TypeDB.

DateTime

DateTime(value)

Bases: Attribute

DateTime attribute type that accepts naive datetime values.

This maps to TypeDB's 'datetime' type, which does not include timezone information.

Example

class CreatedAt(DateTime): pass

Usage with naive datetime

event = Event(created_at=CreatedAt(datetime(2024, 1, 15, 10, 30, 45)))

Convert to DateTimeTZ

aware_dt = created_at.add_timezone() # Implicit: add system timezone aware_dt_utc = created_at.add_timezone(timezone.utc) # Explicit: add UTC

Initialize DateTime attribute with a datetime value.

Parameters:

Name Type Description Default
value datetime

The datetime value to store

required
Source code in type_bridge/attribute/datetime.py
def __init__(self, value: datetime_type):
    """Initialize DateTime attribute with a datetime value.

    Args:
        value: The datetime value to store
    """
    super().__init__(value)

value property

value

Get the stored datetime value.

add_timezone

add_timezone(tz=None)

Convert DateTime to DateTimeTZ by adding timezone information.

Implicit conversion (tz=None): Add system/local timezone Explicit conversion (tz provided): Add specified timezone

Parameters:

Name Type Description Default
tz timezone | None

Optional timezone to add to the naive datetime. If None, uses system local timezone (astimezone()). If provided, uses that specific timezone.

None

Returns:

Type Description
DateTimeTZ

DateTimeTZ instance with timezone-aware datetime

Example
Implicit: add system timezone

aware = naive_dt.add_timezone()

Explicit: add UTC timezone

from datetime import timezone aware_utc = naive_dt.add_timezone(timezone.utc)

Explicit: add JST (+9) timezone

from datetime import timezone, timedelta jst = timezone(timedelta(hours=9)) aware_jst = naive_dt.add_timezone(jst)

Source code in type_bridge/attribute/datetime.py
def add_timezone(self, tz: timezone_type | None = None) -> "DateTimeTZ":
    """Convert DateTime to DateTimeTZ by adding timezone information.

    Implicit conversion (tz=None): Add system/local timezone
    Explicit conversion (tz provided): Add specified timezone

    Args:
        tz: Optional timezone to add to the naive datetime.
            If None, uses system local timezone (astimezone()).
            If provided, uses that specific timezone.

    Returns:
        DateTimeTZ instance with timezone-aware datetime

    Example:
        # Implicit: add system timezone
        aware = naive_dt.add_timezone()

        # Explicit: add UTC timezone
        from datetime import timezone
        aware_utc = naive_dt.add_timezone(timezone.utc)

        # Explicit: add JST (+9) timezone
        from datetime import timezone, timedelta
        jst = timezone(timedelta(hours=9))
        aware_jst = naive_dt.add_timezone(jst)
    """
    from type_bridge.attribute.datetimetz import DateTimeTZ

    dt_value = self.value
    if tz is None:
        # Implicit: add system timezone
        aware_dt = dt_value.astimezone()
    else:
        # Explicit: add specified timezone
        aware_dt = dt_value.replace(tzinfo=tz)

    return DateTimeTZ(aware_dt)

__add__

__add__(other)

Add a Duration to this DateTime.

Parameters:

Name Type Description Default
other Any

A Duration to add to this datetime

required

Returns:

Type Description
DateTime

New DateTime with the duration added

Example

from type_bridge import Duration dt = DateTime(datetime(2024, 1, 31, 14, 0, 0)) duration = Duration("P1M") result = dt + duration # DateTime(2024-02-28 14:00:00)

Source code in type_bridge/attribute/datetime.py
def __add__(self, other: Any) -> "DateTime":
    """Add a Duration to this DateTime.

    Args:
        other: A Duration to add to this datetime

    Returns:
        New DateTime with the duration added

    Example:
        from type_bridge import Duration
        dt = DateTime(datetime(2024, 1, 31, 14, 0, 0))
        duration = Duration("P1M")
        result = dt + duration  # DateTime(2024-02-28 14:00:00)
    """
    from type_bridge.attribute.duration import Duration

    if isinstance(other, Duration):
        # Add duration to datetime
        # Use isodate's add_duration which handles month/day arithmetic

        new_dt = self.value + other.value
        return DateTime(new_dt)
    return NotImplemented

__radd__

__radd__(other)

Reverse addition for Duration + DateTime.

Source code in type_bridge/attribute/datetime.py
def __radd__(self, other: Any) -> "DateTime":
    """Reverse addition for Duration + DateTime."""
    return self.__add__(other)