15.3。 時間 —時間アクセスと変換
このモジュールは、さまざまな時間関連の機能を提供します。 関連する機能については、 datetime および calendar モジュールも参照してください。
このモジュールは常に利用可能ですが、すべての機能がすべてのプラットフォームで利用できるわけではありません。 このモジュールで定義されている関数のほとんどは、同じ名前のプラットフォームCライブラリ関数を呼び出します。 これらの関数のセマンティクスはプラットフォームによって異なるため、プラットフォームのドキュメントを参照すると役立つ場合があります。
いくつかの用語と規則の説明が整いました。
- エポックは時間が始まるポイントです。 その年の1月1日の0時間で、「エポックからの時間」はゼロです。 Unixの場合、エポックは1970年です。 エポックが何であるかを知るには、
gmtime(0)
を見てください。
- このモジュールの関数は、エポックより前または遠い将来の日付と時刻を処理しません。 将来のカットオフポイントは、Cライブラリによって決定されます。 Unixの場合、通常は2038年です。
- 2000年問題(Y2K)の問題:Pythonはプラットフォームの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は協定世界時(以前はグリニッジ標準時、またはGMTと呼ばれていました)です。 頭字語UTCは間違いではなく、英語とフランス語の間の妥協点です。
DSTは夏時間であり、1年の一部で(通常は)1時間タイムゾーンを調整します。 DSTルールは魔法であり(現地の法律によって決定されます)、年ごとに変わる可能性があります。 Cライブラリには、ローカルルールを含むテーブルがあり(多くの場合、柔軟性のためにシステムファイルから読み取られます)、この点でTrueWisdomの唯一のソースです。
さまざまなリアルタイム関数の精度は、それらの値または引数が表現される単位によって示唆されるよりも低い場合があります。 例えば ほとんどのUnixシステムでは、時計は1秒間に50回または100回しか「刻み」ません。
一方、 time()および sleep()の精度は、同等のUnixよりも優れています。時間は浮動小数点数 time()[X169X ]は利用可能な最も正確な時間を返し(利用可能な場合はUnix
gettimeofday()
を使用)、 sleep()はゼロ以外の分数の時間を受け入れます(Unixselect()
は実装に使用されます)これ、利用可能な場合)。gmtime()、 localtime()、および strptime()によって返され、 asctime()によって受け入れられる時間値。 mktime()および strftime()は、9つの整数のシーケンスと見なすことができます。 gmtime()、 localtime()、および strptime()の戻り値も、個々のフィールドの属性名を提供します。
これらのオブジェクトの説明については、 struct_time を参照してください。
バージョン2.2で変更:時間値シーケンスがタプルから struct_time に変更され、フィールドの属性名が追加されました。
次の関数を使用して、時間表現を変換します。
から
に
使用
エポックからの秒数
UTCの struct_time
エポックからの秒数
現地時間の struct_time
UTCの struct_time
エポックからの秒数
現地時間の struct_time
エポックからの秒数
このモジュールは、次の関数とデータ項目を定義します。
- time.accept2dyear
- 2桁の年の値を受け入れるかどうかを示すブール値。 これはデフォルトでtrueですが、環境変数 PYTHONY2K が空でない文字列に設定されている場合はfalseに設定されます。 実行時に変更することもできます。
- time.altzone
- ローカルDSTタイムゾーンのオフセット(UTCの西の秒数)(定義されている場合)。 ローカルDSTタイムゾーンがUTCの東にある場合(英国を含む西ヨーロッパの場合など)、これはマイナスになります。
daylight
がゼロ以外の場合にのみこれを使用してください。
- time.asctime([t])
gmtime()または localtime()によって返される時間を表すタプルまたは struct_time を、次の形式の24文字の文字列に変換します。
'Sun Jun 20 23:21:05 1993'
。 t が指定されていない場合、 localtime()によって返される現在の時刻が使用されます。 ロケール情報は asctime()では使用されません。ノート
同じ名前のC関数とは異なり、末尾に改行はありません。
バージョン2.1で変更: t を省略できるようになりました。
- time.clock()
Unixでは、現在のプロセッサ時間を秒単位の浮動小数点数として返します。 精度、そして実際には「プロセッサ時間」の意味の定義そのものは、同じ名前のC関数の精度に依存しますが、いずれの場合も、これはPythonまたはタイミングアルゴリズムのベンチマークに使用する関数です。
Windowsでは、この関数は、Win32関数
QueryPerformanceCounter()
に基づいて、この関数の最初の呼び出しから経過した実時間秒を浮動小数点数として返します。 通常、解像度は1マイクロ秒よりも優れています。
- time.ctime([secs])
エポックからの秒数で表される時間を現地時間を表す文字列に変換します。 secs が指定されていない場合、または None の場合、 time()によって返される現在の時刻が使用されます。
ctime(secs)
はasctime(localtime(secs))
と同等です。 ロケール情報は ctime()では使用されません。バージョン2.1で変更: 秒を省略できるようになりました。
バージョン2.4で変更: secs が None の場合、現在の時刻が使用されます。
- time.daylight
- DSTタイムゾーンが定義されている場合はゼロ以外。
- time.gmtime([secs])
エポックからの秒数で表される時間をUTCの struct_time に変換します。この場合、dstフラグは常にゼロです。 secs が指定されていない場合、または None の場合、 time()によって返される現在の時刻が使用されます。 1秒の端数は無視されます。 struct_time オブジェクトの説明については、上記を参照してください。 この関数の逆関数については、 calendar.timegm()を参照してください。
バージョン2.1で変更: 秒を省略できるようになりました。
バージョン2.4で変更: secs が None の場合、現在の時刻が使用されます。
- time.localtime([secs])
gmtime()と同様ですが、現地時間に変換されます。 secs が指定されていない場合、または None の場合、 time()によって返される現在の時刻が使用されます。 DSTが指定された時間に適用されると、dstフラグは
1
に設定されます。バージョン2.1で変更: 秒を省略できるようになりました。
バージョン2.4で変更: secs が None の場合、現在の時刻が使用されます。
- time.mktime(t)
- これは localtime()の逆関数です。 その引数は、 struct_time または完全な9タプル(dstフラグが必要なため、不明な場合は
-1
をdstフラグとして使用)であり、 local [で時間を表します。 X173X]時間、UTCではありません。 time()との互換性のために、浮動小数点数を返します。 入力値を有効な時間として表すことができない場合、OverflowError
またはValueError
のいずれかが発生します(これは、無効な値がPythonまたは基盤となるCライブラリによってキャッチされるかどうかによって異なります)。 時間を生成できる最も早い日付は、プラットフォームによって異なります。
- time.sleep(secs)
- 指定された秒数の間、現在のスレッドの実行を一時停止します。 引数は、より正確なスリープ時間を示すための浮動小数点数である場合があります。 キャッチされたシグナルは、そのシグナルのキャッチルーチンの実行後に sleep()を終了するため、実際の一時停止時間は要求された時間よりも短い場合があります。 また、システム内の他のアクティビティのスケジュールが原因で、一時停止時間が任意の量だけ要求されるよりも長くなる場合があります。
- time.strftime(format[, t])
gmtime()または localtime()によって返される時間を表すタプルまたは struct_time を、 format で指定された文字列に変換します。口論。 t が指定されていない場合、 localtime()によって返される現在の時刻が使用されます。 format は文字列である必要があります。
ValueError
は、 t のいずれかのフィールドが許容範囲外の場合に発生します。 strftime()は、ロケールに依存するバイト文字列を返します。strftime(<myformat>).decode(locale.getlocale()[1])
を実行すると、結果をUnicodeに変換できます。バージョン2.1で変更: t を省略できるようになりました。
バージョン2.4で変更: t のフィールドが範囲外の場合に
ValueError
が発生しました。バージョン2.5で変更: 0は、タイムタプル内の任意の位置の有効な引数になりました。 通常は違法である場合、値は強制的に正しい値になります。
次のディレクティブは、 format 文字列に埋め込むことができます。 これらは、オプションのフィールド幅と精度の指定なしで表示され、 strftime()の結果で示された文字に置き換えられます。
指令
意味
ノート
%a
ロケールの省略された平日の名前。
%A
ロケールの完全な平日の名前。
%b
ロケールの省略された月の名前。
%B
ロケールの完全な月の名前。
%c
ロケールの適切な日付と時刻の表現。
%d
10進数としての月の日[01,31]。
%H
10進数としての時間(24時間制)[00,23]。
%I
10進数としての時間(12時間制)[01,12]。
%j
10進数としての年の日[001,366]。
%m
10進数としての月[01,12]。
%M
10進数としての分[00,59]。
%p
ロケールのAMまたはPMに相当します。
(1)
%S
10進数として2番目[00,61]。
(2)
%U
10進数としての年の週番号(週の最初の日としての日曜日)[00,53]。 最初の日曜日に先行する新年のすべての日は、第0週と見なされます。
(3)
%w
10進数としての平日[0(日曜日)、6]。
%W
10進数としての年の週番号(週の最初の日としての月曜日)[00,53]。 最初の月曜日より前の新年のすべての日は、第0週と見なされます。
(3)
%x
ロケールの適切な日付表現。
%X
ロケールの適切な時間表現。
%y
10進数としての世紀のない年[00,99]。
%Y
10進数として世紀を持つ年。
%Z
タイムゾーン名(タイムゾーンが存在しない場合は文字なし)。
%%
リテラル
'%'
文字。ノート:
strptime()関数と一緒に使用すると、
%p
ディレクティブは、%I
ディレクティブを使用して時間を解析する場合にのみ、出力時間フィールドに影響します。範囲は実際には
0
から61
です。 これはうるう秒と(非常にまれな)二重うるう秒を占めます。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'
特定のプラットフォームでは追加のディレクティブがサポートされている場合がありますが、ここにリストされているものだけがANSICによって標準化された意味を持っています。 ご使用のプラットフォームでサポートされているフォーマットコードの完全なセットを確認するには、 strftime(3)のドキュメントを参照してください。
一部のプラットフォームでは、オプションのフィールド幅と精度の指定により、ディレクティブの最初の
'%'
の直後に次の順序で続くことができます。 これも持ち運びできません。%j
が3である場合を除いて、フィールド幅は通常2です。
- time.strptime(string[, format])
形式に従って時間を表す文字列を解析します。 戻り値は、 gmtime()または localtime()によって返される struct_time です。
format パラメーターは、 strftime()で使用されるものと同じディレクティブを使用します。 デフォルトは
"%a %b %d %H:%M:%S %Y"
で、 ctime()によって返されるフォーマットと一致します。 string が format に従って解析できない場合、または解析後にデータが過剰な場合は、ValueError
が発生します。 より正確な値を推測できない場合に欠落データを埋めるために使用されるデフォルト値は、(1900, 1, 1, 0, 0, 0, 0, 1, -1)
です。例えば:
>>> import time >>> time.strptime("30 Nov 00", "%d %b %y") 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
がtrueであるかどうかに基づいています。 このため、常に既知である(そして、夏時間以外のタイムゾーンと見なされる)UTCとGMTを認識することを除いて、プラットフォーム固有です。ドキュメントで指定されているディレクティブのみがサポートされています。
strftime()
はプラットフォームごとに実装されているため、リストされているものよりも多くのディレクティブを提供できる場合があります。 ただし、strptime()
はどのプラットフォームからも独立しているため、サポートされていると文書化されていない利用可能なすべてのディレクティブを必ずしもサポートしているわけではありません。
- class time.struct_time
gmtime()、 localtime()、および strptime()によって返される時間値シーケンスのタイプ。 これは、名前付きタプルインターフェースを持つオブジェクトです。値には、インデックスおよび属性名でアクセスできます。 次の値があります。
索引
属性
値
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は、これが不明であることを示し、通常、正しい状態が入力されます。struct_time を予期している関数、または間違ったタイプの要素を持つ関数に、長さが正しくないタプルが渡されると、
TypeError
が発生します。
- time.time()
- エポックからの時間を浮動小数点数として秒単位で返します。 時刻は常に浮動小数点数として返されますが、すべてのシステムが1秒よりも高い精度で時刻を提供するわけではないことに注意してください。 この関数は通常、減少しない値を返しますが、システムクロックが2つの呼び出しの間に戻されている場合は、前の呼び出しよりも低い値を返すことがあります。
- time.timezone
- UTCの西の秒単位のローカル(非DST)タイムゾーンのオフセット(西ヨーロッパのほとんどで負、米国で正、英国でゼロ)。
- time.tzname
- 2つの文字列のタプル。1つ目はローカルの非DSTタイムゾーンの名前、2つ目はローカルのDSTタイムゾーンの名前です。 DSTタイムゾーンが定義されていない場合は、2番目の文字列を使用しないでください。
- time.tzset()
ライブラリルーチンで使用される時間変換ルールをリセットします。 環境変数
TZ
は、これがどのように行われるかを指定します。 また、変数tzname
(TZ
環境変数から)、timezone
(UTCの西の非DST秒)、altzone
(UTCの西のDST秒)およびdaylight
(このタイムゾーンに夏時間のルールがない場合は0に、夏時間の時間、過去、現在、または未来がある場合はゼロ以外に適用)。バージョン2.3の新機能。
可用性:Unix。
ノート
多くの場合、
TZ
環境変数を変更すると、 tzset()を呼び出さずに、 localtime()などの関数の出力に影響を与える可能性があります。振る舞いは信頼されるべきではありません。TZ
環境変数には空白を含めないでください。TZ
環境変数の標準形式は次のとおりです(わかりやすくするために空白を追加)。std offset [dst [offset [,start[/time], end[/time]]]]
コンポーネントは次のとおりです。
std
およびdst
タイムゾーンの略語を示す3つ以上の英数字。 これらはtime.tznameに伝播されます
offset
オフセットの形式は
± hh[:mm[:ss]]
です。 これは、UTCに到着する現地時間の付加価値を示します。 '-'が前に付いている場合、タイムゾーンは本初子午線の東にあります。 そうでなければ、それは西です。 dstの後にオフセットがない場合、夏時間は標準時間より1時間進んでいると見なされます。start[/time], end[/time]
DSTにいつ変更するか、DSTからいつ変更するかを示します。 開始日と終了日の形式は次のいずれかです。
Jn
ユリウス日 NS (1 <= NS <= 365)。 うるう日はカウントされないため、すべての年で2月28日は59日目、3月1日は60日目です。
n
ゼロベースのユリウス日(0 <= NS <= 365)。 飛躍日数をカウントし、2月29日を参照することができます。
Mm.n.d
NS NS '日(0 <= NS <= 6)または週 NS 月の NS 今年の(1 <= NS <= 5、1 <= NS <= 12、ここで5週目は「最後の NS 月の日 NS 」は、第4週または第5週のいずれかに発生する可能性があります)。 1週目は、 d 日が発生する最初の週です。 ゼロ日は日曜日です。
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))データベースを使用してタイムゾーンルールを指定する方が便利です。 これを行うには、
TZ
環境変数を、通常は [X198Xにあるシステムの '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')
も参照してください
- モジュール日時
- 日付と時刻へのよりオブジェクト指向のインターフェース。
- モジュールロケール
- 国際化サービス。 ロケール設定は、 strftime()および strptime()の多くのフォーマット指定子の解釈に影響します。
- モジュールカレンダー
- 一般的なカレンダー関連の機能。 timegm()は、このモジュールの gmtime()の逆です。
脚注
- 1
%Z
の使用は非推奨になりましたが、優先される時間/分オフセットに拡張される%z
エスケープは、すべてのANSICライブラリでサポートされているわけではありません。 また、元の1982 RFC 822 標準を厳密に読むと、2桁の年(%Yではなく%y)が必要になりますが、実際には4桁の年に移行しました。 2000年。 その後、 RFC 822 は廃止され、4桁の年は RFC 1123 によって最初に推奨され、によって義務付けられました。 ] RFC 2822 。