GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Time-Parsing.html ・ emacs-doc.conao3.com

43.8 パースとフォーマットにかかる時間

これらの関数は、時刻値を文字列に変換し、またその逆も行います。時刻値は、Lispのタイムスタンプ(Time of Dayを参照)またはデコード済みの時刻構造体(Time Conversionを参照)のいずれかで表現されます。

関数: date-to-time string

この関数は時刻文字列 string を解析し、対応する Lisp タイムスタンプを返します。引数 string は日時を表す必要があり、parse-time-string で認識される形式のいずれかである必要があります(後述)。この関数は、string に明示的なタイムゾーン情報がない場合はローカル時刻を、string に月、日、または時刻の指定がない場合は最も早い値を想定します。オペレーティングシステムによって、時刻およびゾーン値の範囲が制限されます。

関数: parse-time-string string

この関数は、時刻文字列 string をデコード済みの時刻構造体に解析します(時刻変換 を参照)。引数 string は、“Fri, 25 Mar 2016 16:24:56 +0100” や “1998-09-12T12:21:54-0200” のように、RFC 822(またはそれ以降)や ISO 8601 形式の文字列である必要がありますが、この関数は形式が不完全な時刻文字列の解析も試みます。“2024-08-13” のような不完全な文字列を ‘(nil nil nil 13 8 2024 nil -1 nil)’ のような不完全な構造体に解析し、そこでは未知の DST 値が −1 となり、その他の未知の値は nil となります。

なお、decode-time(時刻変換を参照)とは異なり、この関数は時刻文字列を解釈しません。特に、string 引数の daylight-saving および timezone または UTC offset 部分の値は、返される日時の値には影響せず、返されるデコード済み時刻構造体の最後の2つのメンバにのみ影響します。例えば、string にタイムゾーン情報が含まれている場合、デコード済み時刻構造体にはその情報が含まれます。そうでない場合、返される値のタイムゾーンメンバは nil となります。言い換えれば、この関数は単に日時のテキスト表現を個別の数値に変換するものであり、入力時刻がローカルか UTC かは問いません。

Lispプログラムがこの関数の戻り値を他の時刻関連APIに渡す場合は、デコードされた時刻構造体のnilメンバが正しく解釈されるようにし、特にタイムゾーン情報の欠如が、呼び出し元プログラムの要件に応じてUTCまたはローカル時刻として解釈されるようにする必要がある。

関数: iso8601-parse string

より厳格な関数(無効な入力に対してエラーを発生させるもの)が必要な場合は、Lispプログラムでは代わりにこの関数を使用できます。この関数はISO 8601規格のあらゆるバリエーションを解析できるため、前述の形式に加えて、「1998W45-3」(週番号)や「1998-245」(序数日)といった形式も解析可能です。期間を解析するにはiso8601-parse-durationを、間隔を解析するにはiso8601-parse-intervalを使用します。これらの関数はすべてデコード済みの時刻構造体を返しますが、最後の関数だけは例外で、3つの構造体(開始、終了、および期間)を返します。parse-time-stringと同様に、この関数は時刻文字列を解釈しません。特に、string引数の一部であるタイムゾーン指定子やUTCオフセットは、返される日付・時刻の値には影響せず、返されるデコード済み時刻構造体の最後の2つの要素にのみ影響します。ISO 8601規格では、UTCとの関係に関する情報を含まない日付・時刻文字列はローカル時刻であると想定されていますが、この関数は時刻値を解釈しないため、そのような処理は行いません。例えば、stringにタイムゾーン情報が含まれている場合、デコード済み時刻構造体にはその情報が含まれます。そうでない場合、返される値のタイムゾーン要素はnilとなります。言い換えれば、この関数は単に日付・時刻のテキスト表現を個別の数値に変換するものであり、入力時刻がローカルかUTCかは問いません。

関数: iso8601-parse-duration string

この関数は、ISO 8601形式の時間期間 string を解析し、デコード済みの時間構造体を返します。

関数: iso8601-parse-interval string

この関数は、ISO 8601形式の時間間隔 string を解析し、開始時刻、終了時刻、および継続時間を表す3つのデコード済み時間構造体を返します。

関数: format-time-string format-string &optional time zone

この関数は、time(Lispのタイムスタンプである必要があり、timeが省略されているか、またはnilが指定されている場合は現在時刻がデフォルトとなります)を、format-stringに従って文字列に変換します。変換にはタイムゾーンルールzoneが使用され、デフォルトでは現在のタイムゾーンルールが適用されます。タイムゾーンルールを参照してください。引数format-stringには、時刻の一部を置換するよう指示する‘%’シーケンスを含めることができます。以下に、‘%’シーケンスの意味をまとめた表を示します。

‘%a’

これは曜日の略称を表しています。

‘%A’

これは曜日の正式名称を表しています。

‘%b’

これは月の略称を表しています。

‘%B’

これは月の正式名称を表しています。

‘%c’

これは‘%x %X’の同義語です。

‘%C’

これは世紀、すなわち年を100で割り、0方向に切り捨てた値を表します。デフォルトのフィールド幅は2です。

‘%d’

これは月日の日を0埋めしたものです。

‘%D’

これは‘%m/%d/%y’の同義語です。

‘%e’

これは月の日付を、空白埋めして表示します。

‘%F’

これはISO 8601の日付形式を表しており、‘%+4Y-%m-%d’のようなものですが、フラグやフィールド幅が‘+’および(6を引いた後の)‘4’を上書きします。

‘%g’

これは、現在のISO週番号に対応する、世紀を含まない年(00–99)を表します。ISO週は月曜日に始まり、日曜日に終わります。ISO週がある年に始まり別の年に終わる場合、どの年が‘%g’として生成されるかに関する規則は複雑であるため、ここでは説明しません。ただし一般的に、週の日数の大部分が終了する年に含まれる場合、‘%g’はその年を生成します。

‘%G’

これは、現在のISO週番号に対応する世紀の年を表します。

‘%h’

これは‘%b’の同義語です。

‘%H’

これは時刻(00–23)を表します。

‘%I’

これは時刻(01–12)を表します。

‘%j’

これは1年の日数(001–366)に対応しています。

‘%k’

これは時刻(0–23)を表し、空白で埋められています。

‘%l’

これは時刻(1–12)を、空白で埋めたものです。

‘%m’

これは月(01–12)を表します。

‘%M’

これは分(00–59)を表します。

‘%n’

これは改行を表します。

‘%N’

これはナノ秒(000000000–999999999)を表します。表示桁数を少なくするには、ミリ秒には‘%3N’、マイクロ秒には‘%6N’などを使用してください。超過した桁数は、丸め処理を行わずに切り捨てられます。

‘%p’

これは、状況に応じて「AM」または「PM」を表します。

‘%q’

これは暦上の四半期(1–4)を表します。

‘%r’

これは‘%I:%M:%S %p’の同義語です。

‘%R’

これは‘%H:%M’の同義語です。

‘%s’

これは、エポックからの経過秒数(整数)を表します。

‘%S’

これは2番目(00–59、または閏秒対応プラットフォームでは00–60)に相当します。

‘%t’

これはタブ文字を表します。

‘%T’

これは‘%H:%M:%S’の同義語です。

‘%u’

これは曜日の数字(1–7)を表します。月曜日は1日目です。

‘%U’

これは、週が日曜日から始まると想定した場合の、1年の中の週(01–52)を表します。1月1日が日曜日でない場合、最初の部分的な週は第0週となります。

‘%V’

これはISO 8601に基づく1年の週を表します。なお、‘%U’や‘%W’とは異なり、ISO 8601に基づく週は1月1日に1へ繰り上がることはなく、直前の数値を維持します。

‘%w’

これは曜日の数値(0–6)を表します。日曜日は0日目です。

‘%W’

これは、週が月曜日から始まると想定した場合の、1年の中の週(01–52)を表します。1月1日が月曜日でない場合、最初の部分的な週は第0週となります。

‘%x’

これはロケール固有の意味を持ちます。デフォルトのロケール(‘C’ という名前)では、‘%D’ と同等です。

‘%X’

これはロケール固有の意味を持ちます。デフォルトのロケール(‘C’ という名前)では、‘%T’ と同等です。

‘%y’

これは、世紀を含まない年(00–99)を表します。

‘%Y’

これは世紀を含む年を表します。

‘%Z’

これはタイムゾーンの略称(例:‘IST’)を表します。

‘%z’

これはタイムゾーンの数値オフセットを表します。‘z’ の前には、1つ、2つ、または3つのコロンを置くことができます。単なる ‘%z’ が ‘-0500’ を表すなら、‘%:z’ は ‘-05:00’ を、‘%::z’ は ‘-05:00:00’ を表し、‘%:::z’ は ‘%::z’ と同様ですが、末尾の ‘:00’ を省略するため、同じ例では ‘-05’ を表します。

‘%%’

これは単一の ‘%’ を表します。

‘%’の直後には、1つ以上のフラグ文字を指定できます。‘0’は0でパディングし、‘+’は0でパディングするとともに4桁を超える非負の年号の前に‘+’を挿入し、‘_’は空白でパディングし、‘-’はパディングを抑制し、‘^’は文字を大文字にし、‘#’は文字の大文字・小文字を反転させます。

また、これらの ‘%’ シーケンスのいずれにおいても、フィールド幅とパディングの種類を指定できます。これは printf と同様に動作し、フラグの後に ‘%’ シーケンスとしてフィールド幅を数字で記述します。例えば、‘%S’ は分経過後の秒数を指定し、‘%03S’ はこれを0で3桁にパディングし、‘%_3S’ はスペースで3桁にパディングすることを意味します。単なる ‘%3S’ は0でパディングされます。これは、‘%S’ が通常2桁にパディングする方法であるためです。

文字 ‘E’ および ‘O’ は、‘%’ シーケンス内で任意のフラグやフィールド幅の後に使用された場合、修飾子として機能します。‘E’ は、現在のロケールの日付・時刻の代替形式を使用することを指定します。例えば、日本語ロケールでは、%Ex によって日本の天皇の在位期間に基づく日付形式が出力されることがあります。‘E’ は、‘%Ec’、‘%EC’、‘%Ex’、‘%EX’、‘%Ey’ および ‘%EY’ で使用可能です。

‘O’は、通常の10進数の数字の代わりに、現在のロケールにおける数値の代替表記を使用することを意味します。これは、ほとんどの文字、つまり数値を出力するすべての文字で使用可能です。

プログラムのデバッグを容易にするため、認識されない ‘%’ シーケンスはそのままの形で出力されます。今後の Emacs のバージョンでは、新しい ‘%’ シーケンスが拡張機能として認識される可能性があるため、プログラムはこの動作に依存すべきではありません。

この関数は、処理の大部分にCライブラリ関数 strftime(The GNU C Library Reference Manual の Formatting Calendar Time を参照)を使用しています。当該関数と連携するため、まず time と zone を内部形式に変換します。なお、オペレーティングシステムによって時刻およびタイムゾーンの値の範囲が制限されています。また、この関数は locale-coding-system で指定された符号化方式(Locales を参照)を用いて format-string を符号化します。strftime が結果の文字列を返した後、この関数は同じ符号化方式を用いてその文字列を復号します。

関数: format-seconds format-string seconds

この関数は、引数 seconds を format-string に従って年、日、時などの文字列に変換します。引数 seconds は時刻値です(時刻 を参照)。引数 format-string には、変換を制御する ‘%’ シーケンスを含めることができます。以下に、‘%’ シーケンスの意味をまとめた表を示します。

‘%y’
‘%Y’

365日の年の整数。

‘%d’
‘%D’

整数日。

‘%h’
‘%H’

整数時間。

‘%m’
‘%M’

分単位の整数。

‘%s’
‘%S’

秒数。オプションの ‘,’ パラメータを使用する場合、それは浮動小数点数となり、‘,’ の後の数値で小数点以下に何桁使用するかを指定します。‘%,2s’ は「小数点以下2桁を使用する」ことを意味します。

‘%z’

非印字制御フラグ。使用する場合、他の指定子はサイズの大きい順(すなわち、日よりも年が先、分よりも時間が先など)に指定する必要があります。最初の非ゼロの変換が行われるまで、結果文字列の ‘%z’ より左側には何も出力されません。例えば、emacs-uptime(emacs-uptime を参照)で使用されるデフォルト形式では、"%Y, %D, %H, %M, %z%S" は秒数が常に出力されることを意味しますが、年、日、時間、分は非ゼロの場合にのみ表示されます。

‘%x’

「%z」と同様の仕組みで動作するが、代わりに末尾のゼロ値の時刻要素の出力を抑制する非印字制御フラグ。

‘%%’

リテラルの ‘%’ を生成します。

大文字形式のシーケンスでは数値に加えて単位も表示されますが、小文字形式では数値のみが表示されます。

また、‘%’ の後に数値を指定することで、フィールド幅を指定することもできます。数値が短い場合は、空白で埋められます。幅の指定前に省略可能なピリオドを付けると、代わりにゼロ埋めが行われます。例えば、"%.3Y" は "004 years" となる場合があります。