16.3. "time" --- 时间的访问和转换
*********************************

======================================================================

该模块提供了各种时间相关的函数。相关功能还可以参阅 "datetime" 和
"calendar" 模块。

尽管此模块始终可用，但并非所有平台上都提供所有功能。 此模块中定义的大
多数函数调用都具有相同名称的平台C库函数。 因为这些函数的语义因平台而异
,所以使用时最好查阅平台相关文档。

下面是一些术语和惯例的解释.

* *epoch* 是时间开始的点，并且取决于平台。对于Unix， epoch 是1970年1
  月 1日00:00:00（UTC）。要找出给定平台上的 epoch ，请查看
  "time.gmtime(0)" 。

* 术语 *Unix 纪元秒数* 是指自国际标准时间 1970 年 1 月 1 日零时以来
  经 过的总秒数，通常不包括 闰秒。 在所有符合 POSIX 标准的平台上，闰秒
  都 会从总秒数中被扣除。

* 此模块中的功能可能无法处理纪元之前或将来的远期日期和时间。未来的截
  止 点由C库决定；对于32位系统，它通常在2038年。

* **2000年（Y2K）问题** ：Python依赖于平台的C库，它通常没有2000年问
  题 ，因为所有日期和时间都在内部表示为自纪元以来的秒数。函数
  "strptime()" 在给出 "%y" 格式代码时可以解析2位数年份。当解析2位数年
  份时，它们将根据 POSIX 和 ISO C 标准进行转换：值 69--99 映射到 1969
  --1999，值 0--68 映射到2000--2068。

* UTC是协调世界时（以前称为格林威治标准时间，或GMT）。缩写UTC不是错
  误 ，而是英语和法语之间的妥协。

* DST是夏令时，在一年中的一部分时间（通常）调整时区一小时。 DST规则
  很 神奇（由当地法律确定），并且每年都会发生变化。 C 库有一个包含本地
  规 则的表（通常是从系统文件中读取以获得灵活性），并且在这方面是True
  Wisdom的唯一来源。

* 各种实时函数的精度可能低于表示其值或参数的单位所建议的精度。例如，
  在 大多数Unix系统上，时钟 "ticks" 仅为每秒50或100次。

* 另一方面， "time()" 和 "sleep()" 的精度优于它们的Unix等价物：时间
  表 示为浮点数，"time()" 返回最准确的时间 （使用Unix "gettimeofday()"
  如 果可用），并且 "sleep()" 将接受非零分数的时间（Unix "select()" 用
  于 实现此功能，如果可用）。

* 时间值由 "gmtime()"，"localtime()" 和 "strptime()" 返回，并被
  "asctime()"， "mktime()" 和 "strftime()" 接受，是一个 9 个整数的序列
  。 "gmtime()"， "localtime()" 和 "strptime()" 的返回值还提供各个字段
  的属性名称。

  请参阅 "struct_time" 以获取这些对象的描述。

  在 3.3 版更改: 在平台支持相应的 "struct tm" 成员时，"struct_time" 类
  型被扩展提供 "tm_gmtoff" 和 "tm_zone" 属性。

  在 3.6 版更改: "struct_time" 的属性 "tm_gmtoff" 和 "tm_zone" 现在可
  在所有平台上使用。

* 使用以下函数在时间表示之间进行转换：

  +---------------------------+---------------------------+---------------------------+
  | 从                        | 到                        | 使用                      |
  |===========================|===========================|===========================|
  | seconds since the epoch   | UTC 的 "struct_time"      | "gmtime()"                |
  +---------------------------+---------------------------+---------------------------+
  | seconds since the epoch   | 本地时间的 "struct_time"  | "localtime()"             |
  +---------------------------+---------------------------+---------------------------+
  | UTC 的 "struct_time"      | seconds since the epoch   | "calendar.timegm()"       |
  +---------------------------+---------------------------+---------------------------+
  | 本地时间的 "struct_time"  | seconds since the epoch   | "mktime()"                |
  +---------------------------+---------------------------+---------------------------+


16.3.1. 函数
============

time.asctime([t])

   转换一个元组或 "struct_time" 表示的时间，由 "gmtime()" 或
   "localtime()" 返回为以下形式的字符串： "'Sun Jun 20 23:21:05 1993'"
   。如果未提供 *t* ，则使用由 "localtime()" 返回的当前时间。 区域信息
   不被函数 "asctime()" 使用。

   注解: 与同名的C函数不同， "asctime()" 不添加尾随换行符。

time.clock()

   On Unix, return the current processor time as a floating point
   number expressed in seconds.  The precision, and in fact the very
   definition of the meaning of "processor time", depends on that of
   the C function of the same name.

   On Windows, this function returns wall-clock seconds elapsed since
   the first call to this function, as a floating point number, based
   on the Win32 function "QueryPerformanceCounter()". The resolution
   is typically better than one microsecond.

   3.3 版后已移除: The behaviour of this function depends on the
   platform: use "perf_counter()" or "process_time()" instead,
   depending on your requirements, to have a well defined behaviour.

time.clock_getres(clk_id)

   返回指定时钟 *clk_id* 的分辨率（精度）。有关 *clk_id* 的可接受值列
   表，请参阅 Clock ID 常量 。

   Availability: Unix.

   3.3 新版功能.

time.clock_gettime(clk_id)

   返回指定 *clk_id* 时钟的时间。有关 *clk_id* 的可接受值列表，请参阅
   Clock ID 常量 。

   Availability: Unix.

   3.3 新版功能.

time.clock_settime(clk_id, time)

   设置指定 *clk_id* 时钟的时间。 目前， "CLOCK_REALTIME" 是 *clk_id*
   唯一可接受的值。

   Availability: Unix.

   3.3 新版功能.

time.ctime([secs])

   将自 seconds since the epoch 表示的时间转换为表示本地时间的字符串。
   如果未提供 *secs* 或为 "None"，则使用由 "time()" 返回的当前时间。
   "ctime(secs)" 相当于 "asctime(localtime(secs))" 。区域信息不被
   "ctime()" 使用。

time.get_clock_info(name)

   获取有关指定时钟的信息作为命名空间对象。 支持的时钟名称和读取其值的
   相应函数是：

   * "'clock'": "time.clock()"

   * "'monotonic'": "time.monotonic()"

   * "'perf_counter'": "time.perf_counter()"

   * "'process_time'": "time.process_time()"

   * "'time'": "time.time()"

   结果具有以下属性：

   * *adjustable* ： 如果时钟可以自动更改（例如通过NTP守护程序）或由
     系 统管理员手动更改，则为 "True" ，否则为 "False" 。

   * *implementation* ： 用于获取时钟值的基础C函数的名称。有关可能的
     值 ，请参阅 Clock ID 常量 。

   * *monotonic* ：如果时钟不能倒退，则为 "True" ，否则为 "False" 。

   * *resolution* ： 以秒为单位的时钟分辨率（ "float" ）

   3.3 新版功能.

time.gmtime([secs])

   将 seconds since the epoch 为单位的时间转换为UTC的 "struct_time" ，
   其中dst标志始终为零。如果未提供 *secs* 或为 "None" ，则使用由
   "time()" 返回的当前时间。忽略一秒的分数。有关 "struct_time" 对象的
   说明，请参见上文。有关此函数的反函数，请参阅 "calendar.timegm()" 。

time.localtime([secs])

   与 "gmtime()" 相似但转换为当地时间。如果未提供 *secs* 或为 "None"
   ，则使用由 "time()" 返回的当前时间。当 DST 适用于给定时间时，dst标
   志设置为 "1" 。

time.mktime(t)

   这是 "localtime()" 的反函数。它的参数是 "struct_time" 或者完整的 9
   元组（因为需要 dst 标志；如果它是未知的则使用 "-1" 作为dst标志），
   它表示 *local* 的时间，而不是 UTC 。它返回一个浮点数，以便与
   "time()" 兼容。如果输入值不能表示为有效时间，则 "OverflowError" 或
   "ValueError" 将被引发（这取决于Python或底层C库是否捕获到无效值）。
   它可以生成时间的最早日期取决于平台。

time.monotonic()

   返回单调时钟的值（以小数秒为单位），即不能倒退的时钟。时钟不受系统
   时钟更新的影响。返回值的参考点未定义，因此只有连续调用结果之间的差
   异才有效。

   On Windows versions older than Vista, "monotonic()" detects
   "GetTickCount()" integer overflow (32 bits, roll-over after 49.7
   days). It increases an internal epoch (reference time) by 2^32 each
   time that an overflow is detected.  The epoch is stored in the
   process-local state and so the value of "monotonic()" may be
   different in two Python processes running for more than 49 days. On
   more recent versions of Windows and on other operating systems,
   "monotonic()" is system-wide.

   3.3 新版功能.

   在 3.5 版更改: The function is now always available.

time.perf_counter()

   返回性能计数器的值（以小数秒为单位），即具有最高可用分辨率的时钟，
   以测量短持续时间。它确实包括睡眠期间经过的时间，并且是系统范围的。
   返回值的参考点未定义，因此只有连续调用结果之间的差异才有效。

   3.3 新版功能.

time.process_time()

   返回当前进程的系统和用户CPU时间总和的值（以小数秒为单位）。它不包括
   睡眠期间经过的时间。根据定义，它在整个进程范围中。返回值的参考点未
   定义，因此只有连续调用结果之间的差异才有效。

   3.3 新版功能.

time.sleep(secs)

   暂停执行调用线程达到给定的秒数。参数可以是浮点数，以指示更精确的睡
   眠时间。实际的暂停时间可能小于请求的时间，因为任何捕获的信号将在执
   行该信号的捕获例程后终止 "sleep()" 。此外，由于系统中其他活动的安排
   ，暂停时间可能比请求的时间长任意量。

   在 3.5 版更改: 即使睡眠被信号中断，该函数现在至少睡眠 *secs* ，除非
   信号处理程序引发异常（参见 **PEP 475** 作为基本原理）。

time.strftime(format[, t])

   转换一个元组或 "struct_time" 表示的由 "gmtime()" 或 "localtime()"
   返回的时间到由 *format* 参数指定的字符串。如果未提供 *t* ，则使用由
   "localtime()" 返回的当前时间。 *format* 必须是一个字符串。如果 *t*
   中的任何字段超出允许范围，则引发 "ValueError" 。

   0是时间元组中任何位置的合法参数；如果它通常是非法的，则该值被强制改
   为正确的值。

   以下指令可以嵌入 *format* 字符串中。它们显示时没有可选的字段宽度和
   精度规范，并被 "strftime()" 结果中的指示字符替换：

   +-------------+--------------------------------------------------+---------+
   | 指令        | 意义                                             | 注释    |
   |=============|==================================================|=========|
   | "%a"        | 本地化的缩写星期中每日的名称。                   |         |
   +-------------+--------------------------------------------------+---------+
   | "%A"        | 本地化的星期中每日的完整名称。                   |         |
   +-------------+--------------------------------------------------+---------+
   | "%b"        | 本地化的月缩写名称。                             |         |
   +-------------+--------------------------------------------------+---------+
   | "%B"        | 本地化的月完整名称。                             |         |
   +-------------+--------------------------------------------------+---------+
   | "%c"        | 本地化的适当日期和时间表示。                     |         |
   +-------------+--------------------------------------------------+---------+
   | "%d"        | 十进制数 [01,31] 表示的月中日。                  |         |
   +-------------+--------------------------------------------------+---------+
   | "%H"        | 十进制数 [00,23] 表示的小时（24小时制）。        |         |
   +-------------+--------------------------------------------------+---------+
   | "%I"        | 十进制数 [01,12] 表示的小时（12小时制）。        |         |
   +-------------+--------------------------------------------------+---------+
   | "%j"        | 十进制数 [001,366] 表示的年中日。                |         |
   +-------------+--------------------------------------------------+---------+
   | "%m"        | 十进制数 [01,12] 表示的月。                      |         |
   +-------------+--------------------------------------------------+---------+
   | "%M"        | 十进制数 [00,59] 表示的分钟。                    |         |
   +-------------+--------------------------------------------------+---------+
   | "%p"        | 本地化的 AM 或 PM 。                             | (1)     |
   +-------------+--------------------------------------------------+---------+
   | "%S"        | 十进制数 [00,61] 表示的秒。                      | (2)     |
   +-------------+--------------------------------------------------+---------+
   | "%U"        | 十进制数 [00,53] 表示的一年中的周数（星期日作为  | (3)     |
   |             | 一周的第一天）作为。 在第一个星期日之前的新年中  |         |
   |             | 的所有日子都被认为是在第0周。                    |         |
   +-------------+--------------------------------------------------+---------+
   | "%w"        | 十进制数 [0(星期日),6] 表示的周中日。            |         |
   +-------------+--------------------------------------------------+---------+
   | "%W"        | 十进制数 [00,53] 表示的一年中的周数（星期一作为  | (3)     |
   |             | 一周的第一天）作为。 在第一个星期一之前的新年中  |         |
   |             | 的所有日子被认为是在第0周。                      |         |
   +-------------+--------------------------------------------------+---------+
   | "%x"        | 本地化的适当日期表示。                           |         |
   +-------------+--------------------------------------------------+---------+
   | "%X"        | 本地化的适当时间表示。                           |         |
   +-------------+--------------------------------------------------+---------+
   | "%y"        | 十进制数 [00,99] 表示的没有世纪的年份。          |         |
   +-------------+--------------------------------------------------+---------+
   | "%Y"        | 十进制数表示的带世纪的年份。                     |         |
   +-------------+--------------------------------------------------+---------+
   | "%z"        | 时区偏移以格式 +HHMM 或 -HHMM 形式的 UTC/GMT 的  |         |
   |             | 正或负时差指示，其中 H表示十进制小时数字，M表示  |         |
   |             | 小数分钟数字 [-23:59, +23:59] 。                 |         |
   +-------------+--------------------------------------------------+---------+
   | "%Z"        | 时区名称（如果不存在时区，则不包含字符）。       |         |
   +-------------+--------------------------------------------------+---------+
   | "%%"        | 字面的 "'%'" 字符。                              |         |
   +-------------+--------------------------------------------------+---------+

   注释:

   1. 当与 "strptime()" 函数一起使用时，如果使用 "%I" 指令来解析小
      时， "%p" 指令只影响输出小时字段。

   2. 范围真的是 "0" 到 "61" ；值 "60" 在表示 leap seconds 的时间戳
      中 有效，并且由于历史原因支持值 "61" 。

   3. 当与 "strptime()" 函数一起使用时， "%U" 和 "%W" 仅用于指定星
      期几 和年份的计算。

   下面是一个示例，一个与 **RFC 2822** Internet电子邮件标准以兼容的日
   期格式。  [1]

      >>> from time import gmtime, strftime
      >>> strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
      'Thu, 28 Jun 2001 14:17:15 +0000'

   某些平台可能支持其他指令，但只有此处列出的指令具有 ANSI C 标准化的
   含义。要查看平台支持的完整格式代码集，请参阅 *strftime(3)* 文档。

   在某些平台上，可选的字段宽度和精度规范可以按照以下顺序紧跟在指令的
   初始 "'%'" 之后；这也不可移植。字段宽度通常为2，除了 "%j" ，它是3。

time.strptime(string[, format])

   根据格式解析表示时间的字符串。 返回值为一个被 "gmtime()" 或
   "localtime()" 返回的 "struct_time" 。

   *format* 参数使用与 "strftime()" ；使用的指令相同的指令。它默认为匹
   配 "ctime()" 返回格式的 ""%a %b %d %H:%M:%S %Y"`" 。如果 *string*不
   能根据 *format* 解析，或者解析后它有多余的数据，则引发 "ValueError"
   。当无法推断出更准确的值时，用于填充任何缺失数据的默认值是 "(1900,
   1, 1, 0, 0, 0, 0, 1, -1)" 。 *string* 和 *format* 都必须是字符串。

   例如:

   >>> import time
   >>> time.strptime("30 Nov 00", "%d %b %y")   # doctest: +NORMALIZE_WHITESPACE
   time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0,
                    tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)

   支持 "%Z" 指令是基于 "tzname" 中包含的值以及 "daylight" 是否为真。
   因此，它是特定于平台的，除了识别始终已知的 UTC 和 GMT （并且被认为
   是非夏令时时区）。

   仅支持文档中指定的指令。因为每个平台都实现了 "strftime()" ，它有时
   会提供比列出的指令更多的指令。但是 "strptime()" 独立于任何平台，因
   此不一定支持所有未记录为支持的可用指令。

class time.struct_time

   返回的时间值序列的类型为 "gmtime()" 、 "localtime()" 和
   "strptime()" 。它是一个带有 *named tuple* 接口的对象：可以通过索引
   和属性名访问值。 存在以下值：

   +---------+---------------------+-----------------------------------+
   | 索引    | 属性                | 值                                |
   |=========|=====================|===================================|
   | 0       | "tm_year"           | （例如，1993）                    |
   +---------+---------------------+-----------------------------------+
   | 1       | "tm_mon"            | range [1, 12]                     |
   +---------+---------------------+-----------------------------------+
   | 2       | "tm_mday"           | range [1, 31]                     |
   +---------+---------------------+-----------------------------------+
   | 3       | "tm_hour"           | range [0, 23]                     |
   +---------+---------------------+-----------------------------------+
   | 4       | "tm_min"            | range [0, 59]                     |
   +---------+---------------------+-----------------------------------+
   | 5       | "tm_sec"            | range [0, 61]； 见 "strftime()"   |
   |         |                     | 介绍中的 **(2)**                  |
   +---------+---------------------+-----------------------------------+
   | 6       | "tm_wday"           | range [0, 6] ，周一为 0           |
   +---------+---------------------+-----------------------------------+
   | 7       | "tm_yday"           | range [1, 366]                    |
   +---------+---------------------+-----------------------------------+
   | 8       | "tm_isdst"          | 0, 1 或 -1；如下所示              |
   +---------+---------------------+-----------------------------------+
   | N/A     | "tm_zone"           | 时区名称的缩写                    |
   +---------+---------------------+-----------------------------------+
   | N/A     | "tm_gmtoff"         | 以秒为单位的UTC以东偏离           |
   +---------+---------------------+-----------------------------------+

   请注意，与C结构不同，月份值是 [1,12] 的范围，而不是 [0,11] 。

   在调用 "mktime()" 时， "tm_isdst" 可以在夏令时生效时设置为1，而在夏
   令时不生效时设置为0。 值-1表示这是未知的，并且通常会导致填写正确的
   状态。

   当一个长度不正确的元组被传递给期望 "struct_time" 的函数，或者具有错
   误类型的元素时，会引发 "TypeError" 。

time.time()

   返回浮点数的 seconds since the epoch 。epoch 的具体日期和 leap
   seconds 的处理取决于平台。在Windows和大多数Unix系统上， epoch 是
   1970年1月1日00:00:00（UTC），并且闰秒不计入 seconds since the epoch
   。 这通常被称为 Unix time 。 要找出给定平台上的 epoch ，请查看
   "gmtime(0)" 。

   请注意，即使时间总是作为浮点数返回，但并非所有系统都提供高于1秒的精
   度。虽然此函数通常返回非递减值，但如果在两次调用之间设置了系统时钟
   ，则它可以返回比先前调用更低的值。

   返回的数字 "time()" 可以通过将其传递给 "gmtime()" 函数或转换为UTC中
   更常见的时间格式（即年、月、日、小时等）或通过将它传递给
   "localtime()" 函数获得本地时间。在这两种情况下都返回一个
   "struct_time" 对象，日历日期组件可以从中作为属性访问。

time.tzset()

   Resets the time conversion rules used by the library routines. The
   environment variable "TZ" specifies how this is done.

   Availability: Unix.

   注解: 虽然在很多情况下，更改 "TZ" 环境变量而不调用 "tzset()" 可能
     会影响 函数的输出，例如 "localtime()" ，不应该依赖此行为。"TZ" 不
     应该包 含空格。

   "TZ" 环境变量的标准格式是（为了清晰起见，添加了空格）:

      std offset [dst [offset [,start[/time], end[/time]]]]

   组件的位置是：

   "std" 和 "dst"
      三个或更多字母数字，给出时区缩写。这些将传到 time.tzname

   "offset"
      偏移量的形式为： "± hh[:mm[:ss]]" 。这表示添加到达UTC的本地时间
      的值。如果前面有 '-' ，则时区位于本初子午线的东边；否则，在它是
      西边。如果dst之后没有偏移，则假设夏令时比标准时间提前一小时。

   "start[/time], end[/time]"
      指示何时更改为DST和从DST返回。开始日期和结束日期的格式为以下之一
      ：

      "J*n*"
         Julian日 *n* （1 <= *n* <= 365）。闰日不计算在内，因此在所有
         年份中，2月28日是第59天，3月1日是第60天。

      "*n*"
         从零开始的Julian日（0 <= *n* <= 365）。 闰日计入，可以引用2月
         29日。

      "M*m*.*n*.*d*"
         一年中 *m* 月的第 *n* 周（1 <= *n* <= 5 ，1 <= *m* <= 12 ，第
         5 周表示 “可能在 *m* 月第 4 周或第 5 周出现的最后第 *d* 日”）
         的第 *d* 天（0 <= *d* <= 6）。 第 1 周是第 *d* 天发生的第一周
         。 第 0 天是星期天。

      "time" 的格式与 "offset" 的格式相同，但不允许使用前导符号（ '-'
      或 '+' ）。如果没有给出时间，则默认值为02:00:00。

      >>> os.environ['TZ'] = 'EST+05EDT,M4.1.0,M10.5.0'
      >>> time.tzset()
      >>> time.strftime('%X %x %Z')
      '02:07:36 05/08/03 EDT'
      >>> os.environ['TZ'] = 'AEST-10AEDT-11,M10.5.0,M3.5.0'
      >>> time.tzset()
      >>> time.strftime('%X %x %Z')
      '16:08:12 05/08/03 AEST'

   在许多Unix系统（包括 *BSD ， Linux ， Solaris 和 Darwin 上），使用
   系统的区域信息（ *tzfile(5)* ）数据库来指定时区规则会更方便。为此，
   将 "TZ" 环境变量设置为所需时区数据文件的路径，相对于系统 'zoneinfo'
   时区数据库的根目录，通常位于 "/usr/share/zoneinfo" 。 例如，
   "'US/Eastern'" 、 "'Australia/Melbourne'" 、 "'Egypt'" 或
   "'Europe/Amsterdam'"。

      >>> os.environ['TZ'] = 'US/Eastern'
      >>> time.tzset()
      >>> time.tzname
      ('EST', 'EDT')
      >>> os.environ['TZ'] = 'Egypt'
      >>> time.tzset()
      >>> time.tzname
      ('EET', 'EEST')


16.3.2. Clock ID 常量
=====================

这些常量用作 "clock_getres()" 和 "clock_gettime()" 的参数。

time.CLOCK_HIGHRES

   Solaris OS 有一个 "CLOCK_HIGHRES" 计时器，试图使用最佳硬件源，并可
   能提供接近纳秒的分辨率。 "CLOCK_HIGHRES" 是不可调节的高分辨率时钟。

   Availability: Solaris.

   3.3 新版功能.

time.CLOCK_MONOTONIC

   无法设置的时钟，表示自某些未指定的起点以来的单调时间。

   Availability: Unix.

   3.3 新版功能.

time.CLOCK_MONOTONIC_RAW

   类似于 "CLOCK_MONOTONIC" ，但可以访问不受NTP调整影响的原始硬件时间
   。

   Availability: Linux 2.6.28 or later.

   3.3 新版功能.

time.CLOCK_PROCESS_CPUTIME_ID

   来自CPU的高分辨率每进程计时器。

   Availability: Unix.

   3.3 新版功能.

time.CLOCK_THREAD_CPUTIME_ID

   特定于线程的CPU时钟。

   Availability: Unix.

   3.3 新版功能.

以下常量是唯一可以发送到 "clock_settime()" 的参数。

time.CLOCK_REALTIME

   系统范围的实时时钟。 设置此时钟需要适当的权限。

   Availability: Unix.

   3.3 新版功能.


16.3.3. 时区常量
================

time.altzone

   本地DST时区的偏移量，以UTC为单位的秒数，如果已定义。如果当地DST时区
   在UTC以东（如在西欧，包括英国），则是负数。 只有当 "daylight" 非零
   时才使用它。 见下面的注释。

time.daylight

   如果定义了DST时区，则为非零。 见下面的注释。

time.timezone

   本地（非DST）时区的偏移量，UTC以西的秒数（西欧大部分地区为负，美国
   为正，英国为零）。 见下面的注释。

time.tzname

   两个字符串的元组：第一个是本地非DST时区的名称，第二个是本地DST时区
   的名称。 如果未定义DST时区，则不应使用第二个字符串。 见下面的注释。

注解: 对于上述时区常量（ "altzone" 、 "daylight" 、 "timezone" 和
  "tzname" ），该值由模块加载时有效的时区规则确定，或者最后一次
  "tzset()" 被调 用时，并且在过去的时间可能不正确。建议使用来自
  "localtime()" 结果的 "tm_gmtoff" 和 "tm_zone" 来获取时区信息。

参见:

  模块 "datetime"
     更多面向对象的日期和时间接口。

  模块 "locale"
     国际化服务。 区域设置会影响 "strftime()" 和 "strptime()"  中许多
     格式说明符的解析。

  模块 "calendar"
     一般日历相关功能。这个模块的 "timegm()" 是函数 "gmtime()" 的反函
     数。

-[ 脚注 ]-

[1] 现在不推荐使用 "%Z" ，但是所有 ANSI C 库都不支持扩展为首选小时
    /分 钟偏移量的``%z``转义符。 此外，严格的 1982 年原始 **RFC 822**
    标准 要求两位数的年份（%y而不是%Y），但是实际在2000年之前很久就转
    移到了 4位数年。之后， **RFC 822** 已经废弃了，4位数的年份首先被推
    荐 **RFC 1123** ，然后被 **RFC 2822** 强制执行。
