Home | History | Annotate | Download | only in library
      1 
      2 :mod:`time` --- Time access and conversions
      3 ===========================================
      4 
      5 .. module:: time
      6    :synopsis: Time access and conversions.
      7 
      8 
      9 This module provides various time-related functions. For related
     10 functionality, see also the :mod:`datetime` and :mod:`calendar` modules.
     11 
     12 Although this module is always available,
     13 not all functions are available on all platforms.  Most of the functions
     14 defined in this module call platform C library functions with the same name.  It
     15 may sometimes be helpful to consult the platform documentation, because the
     16 semantics of these functions varies among platforms.
     17 
     18 An explanation of some terminology and conventions is in order.
     19 
     20 .. index:: single: epoch
     21 
     22 * The :dfn:`epoch` is the point where the time starts.  On January 1st of that
     23   year, at 0 hours, the "time since the epoch" is zero.  For Unix, the epoch is
     24   1970.  To find out what the epoch is, look at ``gmtime(0)``.
     25 
     26 .. index:: single: Year 2038
     27 
     28 * The functions in this module do not handle dates and times before the epoch or
     29   far in the future.  The cut-off point in the future is determined by the C
     30   library; for Unix, it is typically in 2038.
     31 
     32 .. index::
     33    single: Year 2000
     34    single: Y2K
     35 
     36 .. _time-y2kissues:
     37 
     38 * **Year 2000 (Y2K) issues**:  Python depends on the platform's C library, which
     39   generally doesn't have year 2000 issues, since all dates and times are
     40   represented internally as seconds since the epoch.  Functions accepting a
     41   :class:`struct_time` (see below) generally require a 4-digit year.  For backward
     42   compatibility, 2-digit years are supported if the module variable
     43   ``accept2dyear`` is a non-zero integer; this variable is initialized to ``1``
     44   unless the environment variable :envvar:`PYTHONY2K` is set to a non-empty
     45   string, in which case it is initialized to ``0``.  Thus, you can set
     46   :envvar:`PYTHONY2K` to a non-empty string in the environment to require 4-digit
     47   years for all year input.  When 2-digit years are accepted, they are converted
     48   according to the POSIX or X/Open standard: values 69-99 are mapped to 1969-1999,
     49   and values 0--68 are mapped to 2000--2068. Values 100--1899 are always illegal.
     50 
     51 .. index::
     52    single: UTC
     53    single: Coordinated Universal Time
     54    single: Greenwich Mean Time
     55 
     56 * UTC is Coordinated Universal Time (formerly known as Greenwich Mean Time, or
     57   GMT).  The acronym UTC is not a mistake but a compromise between English and
     58   French.
     59 
     60 .. index:: single: Daylight Saving Time
     61 
     62 * DST is Daylight Saving Time, an adjustment of the timezone by (usually) one
     63   hour during part of the year.  DST rules are magic (determined by local law) and
     64   can change from year to year.  The C library has a table containing the local
     65   rules (often it is read from a system file for flexibility) and is the only
     66   source of True Wisdom in this respect.
     67 
     68 * The precision of the various real-time functions may be less than suggested by
     69   the units in which their value or argument is expressed. E.g. on most Unix
     70   systems, the clock "ticks" only 50 or 100 times a second.
     71 
     72 * On the other hand, the precision of :func:`.time` and :func:`sleep` is better
     73   than their Unix equivalents: times are expressed as floating point numbers,
     74   :func:`.time` returns the most accurate time available (using Unix
     75   :c:func:`gettimeofday` where available), and :func:`sleep` will accept a time
     76   with a nonzero fraction (Unix :c:func:`select` is used to implement this, where
     77   available).
     78 
     79 * The time value as returned by :func:`gmtime`, :func:`localtime`, and
     80   :func:`strptime`, and accepted by :func:`asctime`, :func:`mktime` and
     81   :func:`strftime`, may be considered as a sequence of 9 integers.  The return
     82   values of :func:`gmtime`, :func:`localtime`, and :func:`strptime` also offer
     83   attribute names for individual fields.
     84 
     85   See :class:`struct_time` for a description of these objects.
     86 
     87   .. versionchanged:: 2.2
     88      The time value sequence was changed from a tuple to a :class:`struct_time`, with
     89      the addition of attribute names for the fields.
     90 
     91 * Use the following functions to convert between time representations:
     92 
     93   +-------------------------+-------------------------+-------------------------+
     94   | From                    | To                      | Use                     |
     95   +=========================+=========================+=========================+
     96   | seconds since the epoch | :class:`struct_time` in | :func:`gmtime`          |
     97   |                         | UTC                     |                         |
     98   +-------------------------+-------------------------+-------------------------+
     99   | seconds since the epoch | :class:`struct_time` in | :func:`localtime`       |
    100   |                         | local time              |                         |
    101   +-------------------------+-------------------------+-------------------------+
    102   | :class:`struct_time` in | seconds since the epoch | :func:`calendar.timegm` |
    103   | UTC                     |                         |                         |
    104   +-------------------------+-------------------------+-------------------------+
    105   | :class:`struct_time` in | seconds since the epoch | :func:`mktime`          |
    106   | local time              |                         |                         |
    107   +-------------------------+-------------------------+-------------------------+
    108 
    109 
    110 The module defines the following functions and data items:
    111 
    112 .. data:: accept2dyear
    113 
    114    Boolean value indicating whether two-digit year values will be accepted.  This
    115    is true by default, but will be set to false if the environment variable
    116    :envvar:`PYTHONY2K` has been set to a non-empty string.  It may also be modified
    117    at run time.
    118 
    119 
    120 .. data:: altzone
    121 
    122    The offset of the local DST timezone, in seconds west of UTC, if one is defined.
    123    This is negative if the local DST timezone is east of UTC (as in Western Europe,
    124    including the UK).  Only use this if ``daylight`` is nonzero.
    125 
    126 
    127 .. function:: asctime([t])
    128 
    129    Convert a tuple or :class:`struct_time` representing a time as returned by
    130    :func:`gmtime` or :func:`localtime` to a 24-character string of the following
    131    form: ``'Sun Jun 20 23:21:05 1993'``.  If *t* is not provided, the current time
    132    as returned by :func:`localtime` is used. Locale information is not used by
    133    :func:`asctime`.
    134 
    135    .. note::
    136 
    137       Unlike the C function of the same name, there is no trailing newline.
    138 
    139    .. versionchanged:: 2.1
    140       Allowed *t* to be omitted.
    141 
    142 
    143 .. function:: clock()
    144 
    145    .. index::
    146       single: CPU time
    147       single: processor time
    148       single: benchmarking
    149 
    150    On Unix, return the current processor time as a floating point number expressed
    151    in seconds.  The precision, and in fact the very definition of the meaning of
    152    "processor time", depends on that of the C function of the same name, but in any
    153    case, this is the function to use for benchmarking Python or timing algorithms.
    154 
    155    On Windows, this function returns wall-clock seconds elapsed since the first
    156    call to this function, as a floating point number, based on the Win32 function
    157    :c:func:`QueryPerformanceCounter`. The resolution is typically better than one
    158    microsecond.
    159 
    160 
    161 .. function:: ctime([secs])
    162 
    163    Convert a time expressed in seconds since the epoch to a string representing
    164    local time. If *secs* is not provided or :const:`None`, the current time as
    165    returned by :func:`.time` is used.  ``ctime(secs)`` is equivalent to
    166    ``asctime(localtime(secs))``. Locale information is not used by :func:`ctime`.
    167 
    168    .. versionchanged:: 2.1
    169       Allowed *secs* to be omitted.
    170 
    171    .. versionchanged:: 2.4
    172       If *secs* is :const:`None`, the current time is used.
    173 
    174 
    175 .. data:: daylight
    176 
    177    Nonzero if a DST timezone is defined.
    178 
    179 
    180 .. function:: gmtime([secs])
    181 
    182    Convert a time expressed in seconds since the epoch to a :class:`struct_time` in
    183    UTC in which the dst flag is always zero.  If *secs* is not provided or
    184    :const:`None`, the current time as returned by :func:`.time` is used.  Fractions
    185    of a second are ignored.  See above for a description of the
    186    :class:`struct_time` object. See :func:`calendar.timegm` for the inverse of this
    187    function.
    188 
    189    .. versionchanged:: 2.1
    190       Allowed *secs* to be omitted.
    191 
    192    .. versionchanged:: 2.4
    193       If *secs* is :const:`None`, the current time is used.
    194 
    195 
    196 .. function:: localtime([secs])
    197 
    198    Like :func:`gmtime` but converts to local time.  If *secs* is not provided or
    199    :const:`None`, the current time as returned by :func:`.time` is used.  The dst
    200    flag is set to ``1`` when DST applies to the given time.
    201 
    202    .. versionchanged:: 2.1
    203       Allowed *secs* to be omitted.
    204 
    205    .. versionchanged:: 2.4
    206       If *secs* is :const:`None`, the current time is used.
    207 
    208 
    209 .. function:: mktime(t)
    210 
    211    This is the inverse function of :func:`localtime`.  Its argument is the
    212    :class:`struct_time` or full 9-tuple (since the dst flag is needed; use ``-1``
    213    as the dst flag if it is unknown) which expresses the time in *local* time, not
    214    UTC.  It returns a floating point number, for compatibility with :func:`.time`.
    215    If the input value cannot be represented as a valid time, either
    216    :exc:`OverflowError` or :exc:`ValueError` will be raised (which depends on
    217    whether the invalid value is caught by Python or the underlying C libraries).
    218    The earliest date for which it can generate a time is platform-dependent.
    219 
    220 
    221 .. function:: sleep(secs)
    222 
    223    Suspend execution of the current thread for the given number of seconds.
    224    The argument may be a floating point number to indicate a more precise sleep
    225    time. The actual suspension time may be less than that requested because any
    226    caught signal will terminate the :func:`sleep` following execution of that
    227    signal's catching routine.  Also, the suspension time may be longer than
    228    requested by an arbitrary amount because of the scheduling of other activity
    229    in the system.
    230 
    231 
    232 .. function:: strftime(format[, t])
    233 
    234    Convert a tuple or :class:`struct_time` representing a time as returned by
    235    :func:`gmtime` or :func:`localtime` to a string as specified by the *format*
    236    argument.  If *t* is not provided, the current time as returned by
    237    :func:`localtime` is used.  *format* must be a string.  :exc:`ValueError` is
    238    raised if any field in *t* is outside of the allowed range. :func:`strftime`
    239    returns a locale dependent byte string; the result may be converted to unicode
    240    by doing ``strftime(<myformat>).decode(locale.getlocale()[1])``.
    241 
    242    .. versionchanged:: 2.1
    243       Allowed *t* to be omitted.
    244 
    245    .. versionchanged:: 2.4
    246       :exc:`ValueError` raised if a field in *t* is out of range.
    247 
    248    .. versionchanged:: 2.5
    249       0 is now a legal argument for any position in the time tuple; if it is normally
    250       illegal the value is forced to a correct one.
    251 
    252    The following directives can be embedded in the *format* string. They are shown
    253    without the optional field width and precision specification, and are replaced
    254    by the indicated characters in the :func:`strftime` result:
    255 
    256    +-----------+--------------------------------+-------+
    257    | Directive | Meaning                        | Notes |
    258    +===========+================================+=======+
    259    | ``%a``    | Locale's abbreviated weekday   |       |
    260    |           | name.                          |       |
    261    +-----------+--------------------------------+-------+
    262    | ``%A``    | Locale's full weekday name.    |       |
    263    +-----------+--------------------------------+-------+
    264    | ``%b``    | Locale's abbreviated month     |       |
    265    |           | name.                          |       |
    266    +-----------+--------------------------------+-------+
    267    | ``%B``    | Locale's full month name.      |       |
    268    +-----------+--------------------------------+-------+
    269    | ``%c``    | Locale's appropriate date and  |       |
    270    |           | time representation.           |       |
    271    +-----------+--------------------------------+-------+
    272    | ``%d``    | Day of the month as a decimal  |       |
    273    |           | number [01,31].                |       |
    274    +-----------+--------------------------------+-------+
    275    | ``%H``    | Hour (24-hour clock) as a      |       |
    276    |           | decimal number [00,23].        |       |
    277    +-----------+--------------------------------+-------+
    278    | ``%I``    | Hour (12-hour clock) as a      |       |
    279    |           | decimal number [01,12].        |       |
    280    +-----------+--------------------------------+-------+
    281    | ``%j``    | Day of the year as a decimal   |       |
    282    |           | number [001,366].              |       |
    283    +-----------+--------------------------------+-------+
    284    | ``%m``    | Month as a decimal number      |       |
    285    |           | [01,12].                       |       |
    286    +-----------+--------------------------------+-------+
    287    | ``%M``    | Minute as a decimal number     |       |
    288    |           | [00,59].                       |       |
    289    +-----------+--------------------------------+-------+
    290    | ``%p``    | Locale's equivalent of either  | \(1)  |
    291    |           | AM or PM.                      |       |
    292    +-----------+--------------------------------+-------+
    293    | ``%S``    | Second as a decimal number     | \(2)  |
    294    |           | [00,61].                       |       |
    295    +-----------+--------------------------------+-------+
    296    | ``%U``    | Week number of the year        | \(3)  |
    297    |           | (Sunday as the first day of    |       |
    298    |           | the week) as a decimal number  |       |
    299    |           | [00,53].  All days in a new    |       |
    300    |           | year preceding the first       |       |
    301    |           | Sunday are considered to be in |       |
    302    |           | week 0.                        |       |
    303    +-----------+--------------------------------+-------+
    304    | ``%w``    | Weekday as a decimal number    |       |
    305    |           | [0(Sunday),6].                 |       |
    306    +-----------+--------------------------------+-------+
    307    | ``%W``    | Week number of the year        | \(3)  |
    308    |           | (Monday as the first day of    |       |
    309    |           | the week) as a decimal number  |       |
    310    |           | [00,53].  All days in a new    |       |
    311    |           | year preceding the first       |       |
    312    |           | Monday are considered to be in |       |
    313    |           | week 0.                        |       |
    314    +-----------+--------------------------------+-------+
    315    | ``%x``    | Locale's appropriate date      |       |
    316    |           | representation.                |       |
    317    +-----------+--------------------------------+-------+
    318    | ``%X``    | Locale's appropriate time      |       |
    319    |           | representation.                |       |
    320    +-----------+--------------------------------+-------+
    321    | ``%y``    | Year without century as a      |       |
    322    |           | decimal number [00,99].        |       |
    323    +-----------+--------------------------------+-------+
    324    | ``%Y``    | Year with century as a decimal |       |
    325    |           | number.                        |       |
    326    +-----------+--------------------------------+-------+
    327    | ``%Z``    | Time zone name (no characters  |       |
    328    |           | if no time zone exists).       |       |
    329    +-----------+--------------------------------+-------+
    330    | ``%%``    | A literal ``'%'`` character.   |       |
    331    +-----------+--------------------------------+-------+
    332 
    333    Notes:
    334 
    335    (1)
    336       When used with the :func:`strptime` function, the ``%p`` directive only affects
    337       the output hour field if the ``%I`` directive is used to parse the hour.
    338 
    339    (2)
    340       The range really is ``0`` to ``61``; this accounts for leap seconds and the
    341       (very rare) double leap seconds.
    342 
    343    (3)
    344       When used with the :func:`strptime` function, ``%U`` and ``%W`` are only used in
    345       calculations when the day of the week and the year are specified.
    346 
    347    Here is an example, a format for dates compatible with that specified  in the
    348    :rfc:`2822` Internet email standard.  [#]_ ::
    349 
    350       >>> from time import gmtime, strftime
    351       >>> strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
    352       'Thu, 28 Jun 2001 14:17:15 +0000'
    353 
    354    Additional directives may be supported on certain platforms, but only the
    355    ones listed here have a meaning standardized by ANSI C.  To see the full set
    356    of format codes supported on your platform, consult the :manpage:`strftime(3)`
    357    documentation.
    358 
    359    On some platforms, an optional field width and precision specification can
    360    immediately follow the initial ``'%'`` of a directive in the following order;
    361    this is also not portable. The field width is normally 2 except for ``%j`` where
    362    it is 3.
    363 
    364 
    365 .. function:: strptime(string[, format])
    366 
    367    Parse a string representing a time according to a format.  The return  value is
    368    a :class:`struct_time` as returned by :func:`gmtime` or :func:`localtime`.
    369 
    370    The *format* parameter uses the same directives as those used by
    371    :func:`strftime`; it defaults to ``"%a %b %d %H:%M:%S %Y"`` which matches the
    372    formatting returned by :func:`ctime`. If *string* cannot be parsed according to
    373    *format*, or if it has excess data after parsing, :exc:`ValueError` is raised.
    374    The default values used to fill in any missing data when more accurate values
    375    cannot be inferred are ``(1900, 1, 1, 0, 0, 0, 0, 1, -1)``.
    376 
    377    For example:
    378 
    379       >>> import time
    380       >>> time.strptime("30 Nov 00", "%d %b %y")   # doctest: +NORMALIZE_WHITESPACE
    381       time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0,
    382                        tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)
    383 
    384    Support for the ``%Z`` directive is based on the values contained in ``tzname``
    385    and whether ``daylight`` is true.  Because of this, it is platform-specific
    386    except for recognizing UTC and GMT which are always known (and are considered to
    387    be non-daylight savings timezones).
    388 
    389    Only the directives specified in the documentation are supported.  Because
    390    ``strftime()`` is implemented per platform it can sometimes offer more
    391    directives than those listed.  But ``strptime()`` is independent of any platform
    392    and thus does not necessarily support all directives available that are not
    393    documented as supported.
    394 
    395 
    396 .. class:: struct_time
    397 
    398    The type of the time value sequence returned by :func:`gmtime`,
    399    :func:`localtime`, and :func:`strptime`.  It is an object with a :term:`named
    400    tuple` interface: values can be accessed by index and by attribute name.  The
    401    following values are present:
    402 
    403    +-------+-------------------+---------------------------------+
    404    | Index | Attribute         | Values                          |
    405    +=======+===================+=================================+
    406    | 0     | :attr:`tm_year`   | (for example, 1993)             |
    407    +-------+-------------------+---------------------------------+
    408    | 1     | :attr:`tm_mon`    | range [1, 12]                   |
    409    +-------+-------------------+---------------------------------+
    410    | 2     | :attr:`tm_mday`   | range [1, 31]                   |
    411    +-------+-------------------+---------------------------------+
    412    | 3     | :attr:`tm_hour`   | range [0, 23]                   |
    413    +-------+-------------------+---------------------------------+
    414    | 4     | :attr:`tm_min`    | range [0, 59]                   |
    415    +-------+-------------------+---------------------------------+
    416    | 5     | :attr:`tm_sec`    | range [0, 61]; see **(2)** in   |
    417    |       |                   | :func:`strftime` description    |
    418    +-------+-------------------+---------------------------------+
    419    | 6     | :attr:`tm_wday`   | range [0, 6], Monday is 0       |
    420    +-------+-------------------+---------------------------------+
    421    | 7     | :attr:`tm_yday`   | range [1, 366]                  |
    422    +-------+-------------------+---------------------------------+
    423    | 8     | :attr:`tm_isdst`  | 0, 1 or -1; see below           |
    424    +-------+-------------------+---------------------------------+
    425 
    426    .. versionadded:: 2.2
    427 
    428    Note that unlike the C structure, the month value is a range of [1, 12], not
    429    [0, 11].  A year value will be handled as described under :ref:`Year 2000
    430    (Y2K) issues <time-y2kissues>` above.
    431 
    432    In calls to :func:`mktime`, :attr:`tm_isdst` may be set to 1 when daylight
    433    savings time is in effect, and 0 when it is not.  A value of -1 indicates
    434    that this is not known, and will usually result in the correct state being
    435    filled in.
    436 
    437    When a tuple with an incorrect length is passed to a function expecting a
    438    :class:`struct_time`, or having elements of the wrong type, a
    439    :exc:`TypeError` is raised.
    440 
    441 
    442 .. function:: time()
    443 
    444    Return the time in seconds since the epoch as a floating point number.
    445    Note that even though the time is always returned as a floating point
    446    number, not all systems provide time with a better precision than 1 second.
    447    While this function normally returns non-decreasing values, it can return a
    448    lower value than a previous call if the system clock has been set back between
    449    the two calls.
    450 
    451 
    452 .. data:: timezone
    453 
    454    The offset of the local (non-DST) timezone, in seconds west of UTC (negative in
    455    most of Western Europe, positive in the US, zero in the UK).
    456 
    457 
    458 .. data:: tzname
    459 
    460    A tuple of two strings: the first is the name of the local non-DST timezone, the
    461    second is the name of the local DST timezone.  If no DST timezone is defined,
    462    the second string should not be used.
    463 
    464 
    465 .. function:: tzset()
    466 
    467    Reset the time conversion rules used by the library routines. The environment
    468    variable :envvar:`TZ` specifies how this is done. It will also set the variables
    469    ``tzname`` (from the :envvar:`TZ` environment variable), ``timezone`` (non-DST
    470    seconds West of UTC), ``altzone`` (DST seconds west of UTC) and ``daylight``
    471    (to 0 if this timezone does not have any daylight saving time rules, or to
    472    nonzero if there is a time, past, present or future when daylight saving time
    473    applies).
    474 
    475    .. versionadded:: 2.3
    476 
    477    Availability: Unix.
    478 
    479    .. note::
    480 
    481       Although in many cases, changing the :envvar:`TZ` environment variable may
    482       affect the output of functions like :func:`localtime` without calling
    483       :func:`tzset`, this behavior should not be relied on.
    484 
    485       The :envvar:`TZ` environment variable should contain no whitespace.
    486 
    487    The standard format of the :envvar:`TZ` environment variable is (whitespace
    488    added for clarity)::
    489 
    490       std offset [dst [offset [,start[/time], end[/time]]]]
    491 
    492    Where the components are:
    493 
    494    ``std`` and ``dst``
    495       Three or more alphanumerics giving the timezone abbreviations. These will be
    496       propagated into time.tzname
    497 
    498    ``offset``
    499       The offset has the form: `` hh[:mm[:ss]]``. This indicates the value
    500       added the local time to arrive at UTC.  If preceded by a '-', the timezone
    501       is east of the Prime Meridian; otherwise, it is west. If no offset follows
    502       dst, summer time is assumed to be one hour ahead of standard time.
    503 
    504    ``start[/time], end[/time]``
    505       Indicates when to change to and back from DST. The format of the
    506       start and end dates are one of the following:
    507 
    508       :samp:`J{n}`
    509          The Julian day *n* (1 <= *n* <= 365). Leap days are not counted, so in
    510          all years February 28 is day 59 and March 1 is day 60.
    511 
    512       :samp:`{n}`
    513          The zero-based Julian day (0 <= *n* <= 365). Leap days are counted, and
    514          it is possible to refer to February 29.
    515 
    516       :samp:`M{m}.{n}.{d}`
    517          The *d*'th day (0 <= *d* <= 6) or week *n* of month *m* of the year (1
    518          <= *n* <= 5, 1 <= *m* <= 12, where week 5 means "the last *d* day in
    519          month *m*" which may occur in either the fourth or the fifth
    520          week). Week 1 is the first week in which the *d*'th day occurs. Day
    521          zero is Sunday.
    522 
    523       ``time`` has the same format as ``offset`` except that no leading sign
    524       ('-' or '+') is allowed. The default, if time is not given, is 02:00:00.
    525 
    526    ::
    527 
    528       >>> os.environ['TZ'] = 'EST+05EDT,M4.1.0,M10.5.0'
    529       >>> time.tzset()
    530       >>> time.strftime('%X %x %Z')
    531       '02:07:36 05/08/03 EDT'
    532       >>> os.environ['TZ'] = 'AEST-10AEDT-11,M10.5.0,M3.5.0'
    533       >>> time.tzset()
    534       >>> time.strftime('%X %x %Z')
    535       '16:08:12 05/08/03 AEST'
    536 
    537    On many Unix systems (including \*BSD, Linux, Solaris, and Darwin), it is more
    538    convenient to use the system's zoneinfo (:manpage:`tzfile(5)`)  database to
    539    specify the timezone rules. To do this, set the  :envvar:`TZ` environment
    540    variable to the path of the required timezone  datafile, relative to the root of
    541    the systems 'zoneinfo' timezone database, usually located at
    542    :file:`/usr/share/zoneinfo`. For example,  ``'US/Eastern'``,
    543    ``'Australia/Melbourne'``, ``'Egypt'`` or  ``'Europe/Amsterdam'``. ::
    544 
    545       >>> os.environ['TZ'] = 'US/Eastern'
    546       >>> time.tzset()
    547       >>> time.tzname
    548       ('EST', 'EDT')
    549       >>> os.environ['TZ'] = 'Egypt'
    550       >>> time.tzset()
    551       >>> time.tzname
    552       ('EET', 'EEST')
    553 
    554 
    555 .. seealso::
    556 
    557    Module :mod:`datetime`
    558       More object-oriented interface to dates and times.
    559 
    560    Module :mod:`locale`
    561       Internationalization services.  The locale setting affects the interpretation
    562       of many format specifiers in :func:`strftime` and :func:`strptime`.
    563 
    564    Module :mod:`calendar`
    565       General calendar-related functions.   :func:`~calendar.timegm` is the
    566       inverse of :func:`gmtime` from this module.
    567 
    568 .. rubric:: Footnotes
    569 
    570 .. [#] The use of ``%Z`` is now deprecated, but the ``%z`` escape that expands to the
    571    preferred  hour/minute offset is not supported by all ANSI C libraries. Also, a
    572    strict reading of the original 1982 :rfc:`822` standard calls for a two-digit
    573    year (%y rather than %Y), but practice moved to 4-digit years long before the
    574    year 2000.  After that, :rfc:`822` became obsolete and the 4-digit year has
    575    been first recommended by :rfc:`1123` and then mandated by :rfc:`2822`.
    576 
    577