PHP 8.5.2
Preview: _tzhelper.py Size: 3.12 KB
/usr/lib/python3/dist-packages/twisted/python/_tzhelper.py

# -*- test-case-name: twisted.python.test.test_tzhelper -*-
# Copyright (c) Twisted Matrix Laboratories.
# See LICENSE for details.

"""
Time zone utilities.
"""

from datetime import (
    datetime as DateTime,
    timedelta as TimeDelta,
    timezone,
    tzinfo as TZInfo,
)
from typing import Optional

__all__ = [
    "FixedOffsetTimeZone",
    "UTC",
]


class FixedOffsetTimeZone(TZInfo):
    """
    Represents a fixed timezone offset (without daylight saving time).

    @ivar name: A L{str} giving the name of this timezone; the name just
        includes how much time this offset represents.

    @ivar offset: A L{TimeDelta} giving the amount of time this timezone is
        offset.
    """

    def __init__(self, offset: TimeDelta, name: Optional[str] = None) -> None:
        """
        Construct a L{FixedOffsetTimeZone} with a fixed offset.

        @param offset: a delta representing the offset from UTC.
        @param name: A name to be given for this timezone.
        """
        self.offset = offset
        self.name = name

    @classmethod
    def fromSignHoursMinutes(
        cls, sign: str, hours: int, minutes: int
    ) -> "FixedOffsetTimeZone":
        """
        Construct a L{FixedOffsetTimeZone} from an offset described by sign
        ('+' or '-'), hours, and minutes.

        @note: For protocol compatibility with AMP, this method never uses 'Z'

        @param sign: A string describing the positive or negative-ness of the
            offset.
        @param hours: The number of hours in the offset.
        @param minutes: The number of minutes in the offset

        @return: A time zone with the given offset, and a name describing the
            offset.
        """
        name = "%s%02i:%02i" % (sign, hours, minutes)
        if sign == "-":
            hours = -hours
            minutes = -minutes
        elif sign != "+":
            raise ValueError(f"Invalid sign for timezone {sign!r}")
        return cls(TimeDelta(hours=hours, minutes=minutes), name)

    @classmethod
    def fromLocalTimeStamp(cls, timeStamp: float) -> "FixedOffsetTimeZone":
        """
        Create a time zone with a fixed offset corresponding to a time stamp in
        the system's locally configured time zone.
        """
        offset = DateTime.fromtimestamp(timeStamp) - DateTime.fromtimestamp(
            timeStamp, timezone.utc
        ).replace(tzinfo=None)
        return cls(offset)

    def utcoffset(self, dt: Optional[DateTime]) -> TimeDelta:
        """
        Return the given timezone's offset from UTC.
        """
        return self.offset

    def dst(self, dt: Optional[DateTime]) -> TimeDelta:
        """
        Return a zero L{TimeDelta} for the daylight saving time
        offset, since there is never one.
        """
        return TimeDelta(0)

    def tzname(self, dt: Optional[DateTime]) -> str:
        """
        Return a string describing this timezone.
        """
        if self.name is not None:
            return self.name
        # XXX this is wrong; the tests are
        dt = DateTime.fromtimestamp(0, self)
        return dt.strftime("UTC%z")


UTC = FixedOffsetTimeZone.fromSignHoursMinutes("+", 0, 0)

Directory Contents

Dirs: 3 × Files: 46

Name Size Perms Modified Actions
test DIR
- drwxr-xr-x 2026-01-08 12:56:22
Edit Download
- drwxr-xr-x 2026-01-08 12:55:41
Edit Download
- drwxr-xr-x 2026-01-08 12:56:23
Edit Download
16.42 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
13.87 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
460 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
3.96 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
27.49 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
27.43 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
6.88 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
58.92 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
11.82 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
3.54 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
7.79 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
21.89 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
9.88 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
26.21 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
2.23 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.34 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
3.43 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
6.96 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
20.02 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.08 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
7.01 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
5.79 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
2.62 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
2.23 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
3.57 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
5.45 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
5.28 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
3.25 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
10.65 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.34 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
244 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
8.25 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
33.79 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
26.86 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
273 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
4.66 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
11.99 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
9.45 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
828 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
3.42 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
8.57 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
24.68 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
8.88 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
3.12 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
228 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
598 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).