このモジュールでは、時刻に関するさまざまな関数を提供します。ほとんどの 関数が利用可能ですが、全ての関数が全てのプラットフォームで利用可能な わけではありません。 このモジュールで定義されているほとんどの関数は、プラットフォーム上の 同名の C ライブラリ関数を呼び出します。これらの関数に対する意味付け はプラットフォーム間で異なるため、プラットフォーム提供のドキュメント を読んでおくと便利でしょう。
まずいくつかの用語の説明と慣習について整理します。
gmtime(0)
の値を見るとよいでしょう。
accept2dyear
がゼロでない整数の場合、
2 桁の西暦年をサポートします。この変数の初期値は環境変数
PYTHONY2K が空文字列のとき 1
に設定されます。空文字列
でない文字列が設定されている場合、0
に設定されます。こうして、
PYTHONY2K を空文字列でない文字列に設定することで、西暦年の入力が
すべて 4 桁の西暦年でなければならないようにすることができます。
2桁の西暦年が入力された場合には、POSIX または X/Open 標準に従って変換
されます: 69-99 の西暦年は 1969-1999 となり、0-68 の西暦年は 2000-2068 に
なります。100-1899 は常に不正な値になります。この仕様は
Python 1.5.2(a2) から新たに追加された機能であることに注意してください;
それ以前のバージョン、すなわち Python 1.5.1 および 1.5.2a1 では、1900
以下の年に対して 1900 を足します。
Index | Attribute | Values |
---|---|---|
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() の説明にある (1) を読んで下さい |
6 |
tm_wday | [0,6] の間の数、月曜が 0 になります |
7 |
tm_yday | [1,366] の間の数 |
8 |
tm_isdst | 0, 1 または -1; 以下を参照してください |
C の構造体と違って、月の値が 0-11 でなく 1-12 であることに注意してくだ
さい。西暦年の値は上の ''2000年問題 (Y2K) '' で述べたように扱われます。
夏時間フラグを -1
にして mktime() に渡すと、たいてい
は正確な夏時間の状態を実現します。
struct_time を引数とする関数に正しくない長さのstruct_timeや 要素の型が正しくないstruct_timeを与えた場合には、TypeError が送出されます。
バージョン 2.2 で 変更 された仕様: 時刻値の配列はタプルからstruct_timeに変更され、 それぞれのフィールドに属性名がつけられました。
このモジュールでは以下の関数とデータ型を定義します:
daylight
がゼロでないときのみ使用してください。
[t]) |
'Sun Jun 20 23:21:05 1993'
といった書式の 24 文字
の文字列に変換します。t が与えられていない場合には、
localtime() が返す現在の時刻が使われます。
asctime() はロケール情報を使いません。
注意:
同名の C の関数と違って、末尾には改行文字はありません。
バージョン 2.1 で 変更 された仕様:
tuple を省略できるようになりました。
) |
Windows では、最初にこの関数が呼び出されてからの経過時間を wall-clock 秒で返します。この関数は Win32 関数 QueryPerformanceCounter() に基づいていて、その精度 は通常 1 マイクロ秒以下です。
[secs]) |
None
を指定した場合、time() が返す値を現在の時刻
として使います。
ctime(secs)
は asctime(localtime(secs))
と同じです。ctime() はロケール情報を使いません。
バージョン 2.1 で 変更 された仕様:
secs を省略できるようになりました
バージョン 2.4 で 変更 された仕様:
secs がNone の場合に現在時刻を
使うようになりました
[secs]) |
None
を指定した場合、
time() が返す値を現在の時刻として使います。
秒の端数は無視されます。struct_time
のレイアウトについては上を参照してください。
バージョン 2.1 で 変更 された仕様:
secs を省略できるようになりました
バージョン 2.4 で 変更 された仕様:
secs がNone の場合に現在時刻を
使うようになりました
[secs]) |
None
を指定した場合、
time() が返す値を現在の時刻として使います。
現在の時刻に DST が適用される場合、 dst フラグは 1
に設定
されます。
バージョン 2.1 で 変更 された仕様:
secs を省略できるようになりました。
バージョン 2.4 で 変更 された仕様:
secs がNone の場合に現在時刻を
使うようになりました
t) |
-1
を使ってください) で、
UTC ではなく ローカルの 時刻を指定します。
time() との互換性のために浮動小数点数の値を返します。
入力の値が正しい時刻で表現できない場合、例外OverflowError
または ValueError が送出されます (どちらが送出されるかは
Python および その下にある C ライブラリのどちらにとって無効な値が
入力されたかで決まります) 。この関数で生成できる最も昔の時刻値は
プラットフォームに依存します。
secs) |
format[, t]) |
format 文字列には以下の指示語 (directive) を埋め込むことが できます。これらはフィールド長や精度のオプションを付けずに表され、 strftime() の結果の対応する文字列と入れ替えられます:
Directive | Meaning | Notes |
---|---|---|
%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 |
年の初めから何週目か (日曜を週の始まりとします)を表す 10 進数 [00,53]。年が明けてから最初の日曜日までの全ての 曜日は 0 週目に属すると見なされます。 | (3) |
%w |
曜日を表す 10 進数 [0(日曜日),6]。 | |
%W |
年の初めから何週目か (日曜を週の始まりとします)を表す 10 進数 [00,53]。年が明けてから最初の月曜日までの全ての 曜日は 0 週目に属すると見なされます。 | (3) |
%x |
ロケールにおける適切な日付の表現。 | |
%X |
ロケールにおける適切な時刻の表現。 | |
%y |
上 2 桁なしの西暦年を表す 10 進数 [00,99]。 | |
%Y |
上 2 桁付きの西暦年を表す 10 進数。 | |
%Z |
タイムゾーンの名前 (タイムゾーンがない場合には空文字列)。 | |
%% |
文字 "%" 自体の表現。 |
注意:
%p
ディレクティブが
出力結果の時刻フィールドに影響を及ぼすのは、時刻を解釈するために
%I
を使ったときのみです。
0
to 61
です; これはうるう秒と、
(ごく稀ですが)2 重のうるう秒のためのものです。
%U
および %W
を計算に使うのは曜日と年を指定したときだけです。
以下に RFC 2822 インターネット電子メール標準で定義されている日付 表現と互換の書式の例を示します。 6.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 で意味のある値はここで列挙したものだけです。
いくつかのプラットフォームでは、フィールドの幅や精度を指定する
オプションが以下のように指示語の先頭の文字 "%" の直後に
付けられるようになっていました; この機能も移植性はありません。
フィールドの幅は通常 2 ですが、%j
は例外で 3 です。
string[, format]) |
"%a %b %d %H:%M:%S %Y"
で、ctime() が
返すフォーマットに一致します。
string が format に従って解釈できなかった場合、
例外 ValueError が送出されます。
解析しようとする文字列が解析後に余分なデータを持っていた場合、
ValueError が送出されます。欠落したデータはデフォルトの
値で埋められ、その値は (1900, 1, 1, 0, 0, 0, 0, 1, -1)
です。
%Z
指示語へのサポートは tzname
に収められている値と
daylight
が真かどうかで決められます。このため、常に既知の
(かつ夏時間でないと考えられている) UTC や GMT を認識する時以外は
プラットフォーム固有の動作になります。
) |
) |
利用できるシステム: Unix。
TZ 環境変数には空白文字を含めてはなりません。
環境変数 TZ の標準的な書式は以下です: (分かりやすいように空白を入れています)
各値は以下のようになっています:
時間はオフセットと同じで、先頭に符号 ('-' や '+') を付けてはいけない ところが違います。時刻が指定されていなければ、デフォルトの値 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')
参考:
%Z
の利用は推奨されていません。しかし
ここで実現したい時間及び分オフセットへの展開を行ってくれる %Z
エスケープは全ての ANSI C ライブラリでサポートされているわけではありません。
また、オリジナルの 1982 年に提出された RFC 822 標準は西暦年の表現を 2 桁
と要求しています(%Y でなく%y )。しかし実際には 2000 年になるだいぶ
以前から 4 桁の西暦年表現に移行しています。4 桁の西暦年表現は RFC 2822 に
おいて義務付けられ、伴って RFC 822 での取り決めは撤廃されました。