# whenever > A type-safe Python datetime library with DST-correct arithmetic and distinct instant, zoned, offset, and plain datetime types. ## Pages in this subsection - [The pitfalls of `datetime`](index.md): Overview of the sharp edges in Python's standard datetime module, and how whenever addresses each of them. - [One type for two incompatible concepts](naive-aware.md): Why using a single datetime type for both naive and aware values makes it impossible to enforce the distinction with type annotations. - [`+` ignores DST](dst-ignored.md): Why arithmetic on aware datetime objects silently ignores DST transitions, operating on local clock time instead of elapsed time. - [“Naive” is interpreted differently in different places](naive-meaning.md): Why 'naive' datetime means different things in different parts of the standard library: sometimes the system time zone, sometimes UTC, sometimes neither. - [Ambiguity is resolved without a word](silent-ambiguity.md): Why repeated and skipped local times pass silently in the standard library: fold defaults to 0, there is no way to raise, and the parameter is hard to discover. - [`==` ignores `fold`](broken-equality.md): Why equality between aware datetime objects is inconsistent: PEP 495's fold is ignored in comparisons, so equal moments can compare unequal and vice versa. - [`timezone` isn’t a time zone](timezone-classes.md): How to choose between datetime.timezone, pytz.timezone, and zoneinfo.ZoneInfo, and why the standard library ended up with three confusable options. - [Time zone casing is platform-dependent](zoneinfo-casing.md): Why ZoneInfo time zone IDs are case-sensitive on some filesystems but not others, how that breaks portability and even arithmetic, and how whenever normalizes casing. - [The system time zone is used implicitly](system-timezone.md): Why the standard library's implicit conversion to the system time zone makes code depend on machine configuration, and represents the result as a fixed offset. - [`datetime` inherits from `date`—and it breaks](date-inheritance.md): Why datetime subclassing date is a design flaw that violates the Liskov substitution principle, and how whenever keeps the two types separate. - [`timedelta.seconds` footgun](timedelta-seconds.md): Why timedelta.seconds is a remainder rather than a total, and how that silently breaks for negative or multi-day durations. ## Optional - [Top-level llms.txt](../llms.txt): Complete documentation index.