15.3. "time" --- 時刻データへのアクセスと変換
*********************************************

このモジュールでは、時刻に関するさまざまな関数を提供します。関連した機
能について、"datetime", "calendar" モジュールも参照してください。

このモジュールは常に利用可能ですが、すべての関数がすべてのプラットフォ
ームで利用可能なわけではありません。このモジュールで定義されているほと
んどの関数は、プラットフォーム上の同名の C ライブラリ関数を呼び出しま
す。これらの関数に対する意味付けはプラットフォーム間で異なるため、プラ
ットフォーム提供のドキュメントを読んでおくと便利でしょう。

まずいくつかの用語の説明と慣習について整理します。

* *エポック* (*epoch*) は、時刻の計測がはじまった時点のことです。そ
  の 年の 1 月 1 日の午前 0 時に "エポックからの経過時間" が 0 になる
  よう に設定されます。Unix ではエポックは 1970 年です。エポックがどう
  なっ ているかを知るには、"gmtime(0)" の値を見るとよいでしょう。

* このモジュールの中の関数は、エポック以前あるいは遠い未来の日付や時
  刻 を扱うことができません。将来カットオフ（関数が正しく日付や時刻を
  扱え なくなる）が起きる時点は、C ライブラリによって決まります。
  32-bit シ ステムではカットオフは通常 2038 年です。

* **2000年問題 (Y2K)**: Python はプラットフォームの C ライブラリに依
  存 しています。C ライブラリは日付および時刻をエポックからの経過秒で
  表現 するので、一般的に 2000 年問題を持ちません。時刻を表現する
  "struct_time" （下記を参照してください）を入力として受け取る関数は一
  般的に 4 桁表記の西暦年を要求します。以前のバージョンとの互換性のた
  めに、モジュール変数 "accept2dyear" がゼロでない整数の場合、 2 桁の
  西暦年をサポートします。この変数の初期値は環境変数 "PYTHONY2K" が空
  文字列のとき "1" に設定されます。空文字列でない文字列が設定されてい
  る場合、 "0" に設定されます。こうして、 "PYTHONY2K" を空文字列でない
  文字列に設定することで、西暦年の入力がすべて 4 桁の西暦年でなければ
  ならないようにすることができます。 2桁の西暦年が入力された場合には、
  POSIX または X/Open 標準に従って変換されます: 69-99 の西暦年は
  1969-1999 となり、0--68 の西暦年は 2000--2068 になります。100-1899
  は常に不正な値になります。

* UTC は協定世界時 (Coordinated Universal Time) のことです (以前はグ
  リ ニッジ標準時または GMT として知られていました)。UTC の頭文字の並
  びは 誤りではなく、英仏の妥協によるものです。

* DST は夏時間 (Daylight Saving Time) のことで、一年のうちの一定期間
  に 1 時間タイムゾーンを修正することです。DST のルールは不可思議で (
  地域 ごとに法律で定められています)、年ごとに変わることもあります。C
  ライ ブラリはローカルルールを記したテーブルを持っており (柔軟に対応
  するた め、たいていはシステムファイルから読み込まれます)、この点に関
  しては 唯一の真実の知識の源です。

* 多くの現時刻を返す関数 (real-time functions) の精度は、値や引数を
  表 現するために使う単位から想像されるよりも低いかも知れません。例え
  ば、 ほとんどの Unix システムにおいて、クロックの 1 ティックの精度は
  50 から 100 分の 1 秒に過ぎません。

* 一方、"time()" および "sleep()" は Unix の同等の関数よりましな精度
  を 持っています: 時刻は浮動小数点で表され、"time()" は可能なかぎり最
  も 正確な時刻を (Unix の "gettimeofday()" があればそれを使って) 返し
  ま す。また "sleep()" にはゼロでない端数を与えることができます (Unix
  の "select()" があれば、それを使って実装しています)。

* "gmtime()", "localtime()", "strptime()" が返す時刻値、および
  "asctime()", "mktime()", "strftime()" に与える時刻値はどちらも 9 つ
  の整数からなるシーケンスです。 "gmtime()", "localtime()",
  "strptime()" の戻り値では個々のフィールドに属性名でアクセスすること
  もできます。

  これらのオブジェクトについての解説は "struct_time" を参照してくださ
  い。

  バージョン 2.2 で変更: 時刻値の配列はタプルから "struct_time" に変更
  され、それぞれのフィールドに属性名がつけられました。

* 時間の表現を変換するには、以下の関数を利用してください:

  +---------------------------+---------------------------+---------------------------+
  | 対象                      | 変換先                    | 関数                      |
  +===========================+===========================+===========================+
  | エポックからの秒数        | UTC の "struct_time"      | "gmtime()"                |
  +---------------------------+---------------------------+---------------------------+
  | エポックからの秒数        | ローカル時間の            | "localtime()"             |
  |                           | "struct_time"             |                           |
  +---------------------------+---------------------------+---------------------------+
  | UTC の "struct_time"      | エポックからの秒数        | "calendar.timegm()"       |
  +---------------------------+---------------------------+---------------------------+
  | ローカル時間の            | エポックからの秒数        | "mktime()"                |
  | "struct_time"             |                           |                           |
  +---------------------------+---------------------------+---------------------------+

このモジュールでは以下の関数とデータ型を定義します:

time.accept2dyear

   2 桁の西暦年を使えるかを指定するブール型の値です。標準では真ですが
   、環境変数 "PYTHONY2K" が空文字列でない値に設定されている場合には偽
   になります。実行時に変更することもできます。

time.altzone

   ローカルの夏時間タイムゾーンにおける UTC からの時刻オフセットで、西
   に行くほど増加する、秒で表した値です (ほとんどの西ヨーロッパでは負
   になり、アメリカでは正、イギリスではゼロになります)。"daylight" が
   ゼロでないときのみ使用してください。

time.asctime([t])

   "gmtime()" や "localtime()" が返す時刻を表現するタプル又は
   "struct_time" を、 "'Sun Jun 20 23:21:05 1993'" といった書式の 24
   文字の文字列に変換します。 *t* が与えられていない場合には、
   "localtime()" が返す現在の時刻が使われます。 "asctime()" はロケール
   情報を使いません。

   注釈: 同名の C の関数と違って、末尾に改行文字を加えません。

   バージョン 2.1 で変更: *t* が省略可能になりました。

time.clock()

   Unix では、現在のプロセッサー時間秒を浮動小数点数で返します。時刻の
   精度および "プロセッサー時間 (processor time)" の定義そのものは同じ
   名前の C 関数に依存します。いずれにせよ、この関数は Python のベンチ
   マークや計時アルゴリズムに使われています。

   Windows では、最初にこの関数が呼び出されてからの経過時間を wall-
   clock 秒で返します。この関数は Win32 関数
   "QueryPerformanceCounter()" に基づいていて、その精度は通常 1 マイク
   ロ秒以下です。

time.ctime([secs])

   エポックからの経過秒数で表現された時刻を、ローカルの時刻を表現する
   文字列に変換します。*secs* を指定しないか "None" を指定した場合、
   "time()" が返す値を現在の時刻として使用します。"ctime(secs)" は
   "asctime(localtime(secs))" と等価です。ローカル情報は "ctime()" に
   は使用されません。

   バージョン 2.1 で変更: *secs* が省略可能になりました。

   バージョン 2.4 で変更: *secs* が "None" の場合に現在時刻を使うよう
   になりました。

time.daylight

   DST タイムゾーンが定義されている場合ゼロでない値になります。

time.gmtime([secs])

   エポックからの経過時間で表現された時刻を、UTC で "struct_time" に変
   換します。このとき dst フラグは常にゼロとして扱われます。*secs* を
   指定しないか "None" を指定した場合、"time()" が返す値を現在の時刻と
   して使用します。秒の端数は無視されます。"struct_time" オブジェクト
   については前述の説明を参照してください。"calendar.timegm()" はこの
   関数と逆の変換を行います。

   バージョン 2.1 で変更: *secs* が省略可能になりました。

   バージョン 2.4 で変更: *secs* が "None" の場合に現在時刻を使うよう
   になりました。

time.localtime([secs])

   "gmtime()" に似ていますが、ローカル時間に変換します。*secs* を指定
   しないか "None" を指定した場合、"time()" が返す値を現在の時刻として
   使用します。DST が適用されている場合は dst フラグには "1" が設定さ
   れます。

   バージョン 2.1 で変更: *secs* が省略可能になりました。

   バージョン 2.4 で変更: *secs* が "None" の場合に現在時刻を使うよう
   になりました。

time.mktime(t)

   "localtime()" の逆を行います。引数は "struct_time" か 9 個の要素す
   べての値を持つ完全なタプル (dst フラグも必要です; 現在の時刻に DST
   が適用されるか不明の場合は "-1" を使用してください) で、UTC ではな
   く *ローカル* 時間を指定します。戻り値は "time()" との互換性のため
   に浮動小数点になります。入力した値が正しい時刻を表現できない場合、
   例外 "OverflowError" または "ValueError" が送出されます (どちらが送
   出されるかは、無効な値を受け取ったのが Python と下層の C ライブラリ
   のどちらなのかによって決まります)。この関数で生成できる最も過去の時
   刻値はプラットフォームに依存します。

time.sleep(secs)

   与えられた秒数の間、呼び出したスレッドの実行を停止します。より精度
   の高い実行停止時間を指定するために、引数は浮動小数点にしてもかまい
   ません。何らかのシステムシグナルがキャッチされた場合、それに続いて
   シグナル処理ルーチンが実行され、"sleep()" を停止します。従って実際
   の実行停止時間は要求した時間よりも短くなるかもしれません。また、シ
   ステムが他の処理をスケジュールするために、実行停止時間が要求した時
   間よりも多少長い時間になることもあります。

time.strftime(format[, t])

   Convert a tuple or "struct_time" representing a time as returned by
   "gmtime()" or "localtime()" to a string as specified by the
   *format* argument.  If *t* is not provided, the current time as
   returned by "localtime()" is used.  *format* must be a string.
   "ValueError" is raised if any field in *t* is outside of the
   allowed range. "strftime()" returns a locale dependent byte string;
   the result may be converted to unicode by doing
   "strftime(<myformat>).decode(locale.getlocale()[1])".

   バージョン 2.1 で変更: *t* が省略可能になりました。

   バージョン 2.4 で変更: *t* のフィールド値が許容範囲外の値の場合に
   "ValueError" を送出するようになりました。

   バージョン 2.5 で変更: 0 は時刻値タプルのどこでも使用可能になりまし
   た。もし不正な値の場合には正常な値に修正されます。

   *format* 文字列には以下のディレクティブ (指示語) を埋め込むことがで
   きます。これらはフィールド長や精度のオプションを付けずに表され、
   "strftime()" の結果の対応する文字列に置き換えられます:

   +-------------+----------------------------------+---------+
   | ディレクテ  | 意味                             | 注釈    |
   | ィブ        |                                  |         |
   +=============+==================================+=========+
   | "%a"        | ロケールの短縮された曜日名になり |         |
   |             | ます。                           |         |
   +-------------+----------------------------------+---------+
   | "%A"        | ロケールの曜日名になります。     |         |
   +-------------+----------------------------------+---------+
   | "%b"        | ロケールの短縮された月名になりま |         |
   |             | す。                             |         |
   +-------------+----------------------------------+---------+
   | "%B"        | ロケールの月名になります。       |         |
   +-------------+----------------------------------+---------+
   | "%c"        | ロケールの日時を適切な形式で表し |         |
   |             | ます。                           |         |
   +-------------+----------------------------------+---------+
   | "%d"        | 月中の日にちの 10 進表記になりま |         |
   |             | す [01,31]。                     |         |
   +-------------+----------------------------------+---------+
   | "%H"        | 時 (24 時間表記) の 10 進表記に  |         |
   |             | なります [00,23]。               |         |
   +-------------+----------------------------------+---------+
   | "%I"        | 時 (12 時間表記) の 10 進表記に  |         |
   |             | なります [01,12]。               |         |
   +-------------+----------------------------------+---------+
   | "%j"        | 年中の日にちの 10 進表記になりま |         |
   |             | す [001,366]。                   |         |
   +-------------+----------------------------------+---------+
   | "%m"        | 月の 10 進表記になります [01,12] |         |
   |             | 。                               |         |
   +-------------+----------------------------------+---------+
   | "%M"        | 分の 10 進表記になります [00,59] |         |
   |             | 。                               |         |
   +-------------+----------------------------------+---------+
   | "%p"        | ロケールの AM もしくは PM と等価 | (1)     |
   |             | な文字列になります。             |         |
   +-------------+----------------------------------+---------+
   | "%S"        | 秒の 10 進表記になります [00,61] | (2)     |
   |             | 。                               |         |
   +-------------+----------------------------------+---------+
   | "%U"        | 年の初めから何週目か (日曜を週の | (3)     |
   |             | 始まりとします) を表す 10 進数に |         |
   |             | な ります [00,53]。年が明けてか  |         |
   |             | ら最初の日曜日までのすべての曜日 |         |
   |             | は 0 週 目に属すると見なされます |         |
   |             | 。                               |         |
   +-------------+----------------------------------+---------+
   | "%w"        | 曜日の 10 進表記になります [0 (  |         |
   |             | 日曜日),6]。                     |         |
   +-------------+----------------------------------+---------+
   | "%W"        | 年の初めから何週目か (月曜を週の | (3)     |
   |             | 始まりとします) を表す 10 進数に |         |
   |             | な ります [00,53]。年が明けてか  |         |
   |             | ら最初の月曜日までの全ての曜日は |         |
   |             | 0 週目 に属すると見なされます。  |         |
   +-------------+----------------------------------+---------+
   | "%x"        | ロケールの日付を適切な形式で表し |         |
   |             | ます。                           |         |
   +-------------+----------------------------------+---------+
   | "%X"        | ロケールの時間を適切な形式で表し |         |
   |             | ます。                           |         |
   +-------------+----------------------------------+---------+
   | "%y"        | 西暦の下 2 桁の 10 進表記になり  |         |
   |             | ます [00,99]。                   |         |
   +-------------+----------------------------------+---------+
   | "%Y"        | 西暦 ( 4桁) の 10 進表記を表しま |         |
   |             | す。                             |         |
   +-------------+----------------------------------+---------+
   | "%Z"        | タイムゾーンの名前を表します (タ |         |
   |             | イムゾーンがない場合には空文字列 |         |
   |             | )。                              |         |
   +-------------+----------------------------------+---------+
   | "%%"        | 文字 "'%'" を表します。          |         |
   +-------------+----------------------------------+---------+

   注釈:

   1. "strptime()" 関数で使う場合、"%p" ディレクティブが出力結果の
      時刻 フィールドに影響を及ぼすのは、時刻を解釈するために "%I" を
      使った ときのみです。

   2. 値の幅は実際に "0" から "61" です; これは閏秒を考慮したもので
      、( 極めて稀ですが) 2秒の閏秒も加味しています。

   3. "strptime()" 関数で使う場合、"%U" および "%W" を計算に使うの
      は曜 日と年を指定したときだけです。

   以下に **RFC 2822** インターネット電子メール標準で定義されている日
   付表現と互換の書式の例を示します。  [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()" で使うものと同じディレクティブを
   使います; このパラメータの値はデフォルトでは ""%a %b %d %H:%M:%S
   %Y"" で、"ctime()" が返すフォーマットに一致します。 *string* が
   *format* に従って解釈できなかった場合や解析しようとする *string* が
   解析後に余分なデータを持っていた場合、 "ValueError" が送出されます
   。欠落したデータについて、適切な値を推測できない場合はデフォルトの
   値で埋められ、その値は "(1900, 1, 1, 0, 0, 0, 0, 1, -1)" です。

   例えば:

   >>> 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"            | [1,12] の間の数                   |
   +---------+---------------------+-----------------------------------+
   | 2       | "tm_mday"           | [1,31] の間の数                   |
   +---------+---------------------+-----------------------------------+
   | 3       | "tm_hour"           | [0,23] の間の数                   |
   +---------+---------------------+-----------------------------------+
   | 4       | "tm_min"            | [0,59] の間の数                   |
   +---------+---------------------+-----------------------------------+
   | 5       | "tm_sec"            | [0,61] の間の数 "strftime()" の説 |
   |         |                     | 明にある **(2)** を読んで下さい   |
   +---------+---------------------+-----------------------------------+
   | 6       | "tm_wday"           | [0,6] の間の数、月曜が 0 になりま |
   |         |                     | す                                |
   +---------+---------------------+-----------------------------------+
   | 7       | "tm_yday"           | [1,366] の間の数                  |
   +---------+---------------------+-----------------------------------+
   | 8       | "tm_isdst"          | 0, 1 または -1; 以下を参照してく  |
   |         |                     | ださい                            |
   +---------+---------------------+-----------------------------------+

   バージョン 2.2 で追加.

   C の構造体と違って、月の値が 0 から 11 ではなく 1 から 12 であるこ
   とに注意してください。西暦年の値は上の 2000年問題 (Y2K) で述べたよ
   うに扱われます。

   "mktime()" の呼び出し時に、"tm_isdst" は夏時間が有効な場合は 1、そ
   うでない場合は 0 に設定されることがあります。 値が -1 の場合は夏時
   間について不明なことを表していて、普通 "tm_isdst" は正しい状態に設
   定されます。

   "struct_time" を引数とする関数に正しくない長さの "struct_time" や要
   素の型が正しくない "struct_time" を与えた場合には、 "TypeError" が
   送出されます。

time.time()

   エポックからの秒数を浮動小数点数で返します。時刻は常に浮動小数点で
   返されますが、すべてのシステムが 1 秒より高い精度で時刻を提供すると
   は限らないので注意してください。この関数が返す値は通常減少していく
   ことはありませんが、この関数を 2 回呼び出し、呼び出しの間にシステム
   クロックの時刻を巻き戻して設定した場合には、以前の呼び出しよりも低
   い値が返ることがあります。

time.timezone

   (DST でない) ローカルタイムゾーンの UTC からの時刻オフセットで、西
   に行くほど増加する秒で表した値です (ほとんどの西ヨーロッパでは負に
   なり、アメリカでは正、イギリスではゼロになります)。

time.tzname

   二つの文字列からなるタプルです。最初の要素は DST でないローカルのタ
   イムゾーン名です。ふたつめの要素は DST のタイムゾーンです。DST のタ
   イムゾーンが定義されていない場合。二つ目の文字列を使うべきではあり
   ません。

time.tzset()

   Reset the time conversion rules used by the library routines. The
   environment variable "TZ" specifies how this is done. It will also
   set the variables "tzname" (from the "TZ" environment variable),
   "timezone" (non-DST seconds West of UTC), "altzone" (DST seconds
   west of UTC) and "daylight" (to 0 if this timezone does not have
   any daylight saving time rules, or to nonzero if there is a time,
   past, present or future when daylight saving time applies).

   バージョン 2.3 で追加.

   利用できる環境: Unix。

   注釈: 多くの場合、環境変数 "TZ" を変更すると、 "tzset()" を呼ばな
     い限り "localtime()" のような関数の出力に影響を及ぼすため、値が信
     頼でき なくなってしまいます。"TZ" 環境変数には空白文字を含めては
     なりませ ん。

   環境変数 "TZ" の標準的な書式は以下の通りです (分かりやすいように空
   白を入れています):

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

   各値は以下のようになっています:

   "std" と "dst"
      三文字またはそれ以上の英数字で、タイムゾーンの略称を与えます。こ
      の値は time.tzname になります。

   "offset"
      オフセットは形式: "± hh[:mm[:ss]]" をとります。この表現は、UTC
      時刻にするためにローカルな時間に加算する必要のある時間値を示しま
      す。'-' が先頭につく場合、そのタイムゾーンは本子午線 (Prime
      Meridian) より東側にあります; それ以外の場合は本子午線の西側です
      。オフセットが dst の後ろに続かない場合、夏時間は標準時より一時
      間先行しているものと仮定します。

   "start[/time], end[/time]"
      いつ DST に移動し、DST から戻ってくるかを示します。開始および終
      了日時の形式は以下のいずれかです:

      "J*n*"
         ユリウス日 (Julian day) *n* (1 <= *n* <= 365) を表します。う
         るう日は計算に含められないため、2 月 28 日は常に 59 で、3 月
         1 日は 60 になります。

      "*n*"
         ゼロから始まるユリウス日 (0 <= *n* <= 365) です。うるう日は計
         算に含められるため、2 月 29 日を参照することができます。

      "M*m*.*n*.*d*"
         *m* 月の第 *n* 週における *d* 番目の日 (0 <= *d* <= 6, 1 <=
         *n* <= 5, 1 <= *m* <= 12) を表します。週 5 は月 *m* における
         最終週の *d* 番目の日を表し、第 4 週か第 5 週のどちらかになり
         ます。週 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 を含む)
   では、システムの zoneinfo (*tzfile(5)*) データベースを使ったほうが
   、タイムゾーンごとの規則を指定する上で便利です。これを行うには、必
   要なタイムゾーンデータファイルへのパスをシステムの 'zoneinfo' タイ
   ムゾーンデータベースからの相対で表した値を環境変数 "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')

参考:

  "datetime" モジュール
     日付と時刻に対する、よりオブジェクト指向のインタフェースです。

  "locale" モジュール
     国際化サービスです。ロケールの設定は "strftime()" および
     "strptime()" の多くの書式指定子の解釈に影響を及ぼします。

  "calendar" モジュール
     一般的なカレンダーに関する関数群です。"timegm()" はこのモジュール
     の "gmtime()" の逆を行う関数です。

-[ 注記 ]-

[1] "%Z" の使用は現在非推奨です。ただし、ここで実現したい時間およ
    び分 オフセットへの展開を行ってくれる "%z" エスケープはすべての
    ANSI C ライブラリでサポートされているわけではありません。また、
    1982 年に 提出されたオリジナルの **RFC 822** 標準では西暦の表現を
    2 桁とする よう要求している (%Y でなく%y ) ものの、実際には 2000
    年になるだい ぶ以前から 4 桁の西暦表現に移行しています。その後
    **RFC 822** は撤 廃され、4 桁の西暦表現は **RFC 1123** で初めて勧
    告され、**RFC 2822** において義務付けられました。
