コンテンツにスキップ

「ISO 8601」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
m編集の要約なし
m Broken anchorの修正
 
(22人の利用者による、間の39版が非表示)
1行目: 1行目:
'''ISO 8601'''は、[[日付]]と[[時刻]]の表記に関する[[国際標準化機構|ISO]]の国際規格である。
'''ISO 8601'''は、[[日付]]と[[時刻]]の表記に関する[[国際標準化機構|ISO]]の国際規格である。この規格の主眼は、[[日付]]と[[時刻]]の記述順序が国や文化によってまちまちである<ref group="注">西暦年を末尾の2桁で表す慣習もあるので、11/09/12(または 11.09.12)の表記は、2011-09-12(日本など)、2012-09-11(英国など)、2012-11-09(米国など)の3つの年月日の可能性がある。
</ref><ref>[[:en:Date format by country]]</ref>ものを、大→小の順序([[エンディアン#ビッグエンディアンとリトルエンディアン|ビッグエンディアン]] big-endian)を貫徹して、日付・時刻の記述順序をただ一種類に標準化していることにある<ref>[https://preview.redd.it/hgygeuib7ci61.png?width=2800&format=png&auto=webp&s=1e5f71d9f6178b2d8fea93cafa570d9fb1efbbf2 date-time format by region, visualised] CLDR 38.1/ISO 8601</ref>。


年月日の区切り記号は「-」(ハイフン)のみを用い、「/」などを禁じている。また時刻表現を[[24時制]]だけに限定している。
日本では、これに準拠して[[日本産業規格]]JIS X0301「情報交換のためのデータ要素及び交換形式ー日付及び時刻の表記」が定められている。ただし、JISにおいては、ISO 8601の規定に[[元号]]([[明治]]~[[令和]])による年の規定を追加している<ref>[http://kikakurui.com/x0/X0301-2019-01.pdf JIS X0301:2002] p.25、附属書2(参考)JISと対応する国際規格との対比表、kikakurui.com </ref>。

* 2022年9月4日を、'''2022-09-04'''(拡張形式)もしくは'''20220904'''(基本形式)と表記する<ref group="注">これら以外の2022/09/04(区切りが「-」でない。)、04-09-2022または04/09/2022([[エンディアン#ビッグエンディアンとリトルエンディアン|リトルエンディアン]])、09-04-2022または09/04/2022([[エンディアン#ミドルエンディアン|ミドルエンディアン]])の表記を禁止する。</ref>。
* 2022年9月4日の時刻として 16時07分48.53秒 を併せて表記する場合は、'''2022-09-04T16:07:48.53'''(拡張形式)または'''20220904T160748.53'''(基本形式)と表記する。すなわち記号 '''T''' で区切った後に時刻を続ける。

上記以外に、[[#年と年内の日の番号|日の番号]]、[[#年と週と曜日|暦週の番号]]、[[#タイムゾーン指定子|タイムゾーン]]、[[#継続時間|継続時間]]、[[#期間|期間]]などの記述方法についても規定している。

日本では、これに準拠して[[日本産業規格]]JIS X 0301「情報交換のためのデータ要素及び交換形式ー日付及び時刻の表記」が定められている。JISにおいては、[[元号]]([[明治]]~[[令和]])による年の規定を追加している<ref>[http://kikakurui.com/x0/X0301-2019-01.pdf JIS X 0301:2002] p.25、附属書2(参考)JISと対応する国際規格との対比表、kikakurui.com </ref>。


== 経緯 ==
== 経緯 ==
規格のこれまでの経緯は次のとおりである。
規格の最新版は2019年2月に発行された ISO 8601-1:2019 (Date and time -- Representations for information interchange -- Part 1: Basic rules)<ref>[https://www.iso.org/standard/70907.html ISO 8601-1:2019 - Date and time -- Representations for information interchange -- Part 1: Basic rules]</ref> および ISO 8601-2:2019 (Date and time -- Representations for information interchange -- Part 2: Extensions)<ref>[https://www.iso.org/standard/70908.html ISO 8601-2:2019 - Date and time -- Representations for information interchange -- Part 2: Extensions]</ref> の2分冊。何度も改訂されていて、過去の規格は、ISO 8601:2004<ref>[https://www.iso.org/standard/40874.html ISO 8601:2004 - Data elements and interchange formats -- Information interchange -- Representation of dates and times]</ref>、ISO 8601:2000<ref>[https://www.iso.org/standard/26780.html ISO 8601:2000 - Data elements and interchange formats -- Information interchange -- Representation of dates and times]</ref>、ISO 8601:1988<ref>[https://www.iso.org/standard/15903.html ISO 8601:1988 - Data elements and interchange formats -- Information interchange -- Representation of dates and times]</ref> があり、いずれも正式な題は ''Data elements and interchange formats – Information interchange – Representation of dates and times'' であった。更にその前身は ISO 2014:1976<ref>[https://www.iso.org/standard/6781.html ISO 2014:1976 - Writing of calendar dates in all-numeric form]</ref> などがあった。
* ISO 2014:1976<ref>[https://www.iso.org/standard/6781.html ISO 2014:1976 - Writing of calendar dates in all-numeric form]</ref> Writing of calendar dates in all-numeric form
* ISO 8601:1988<ref>[https://www.iso.org/standard/15903.html ISO 8601:1988 - Data elements and interchange formats -- Information interchange -- Representation of dates and times]</ref> Data elements and interchange formats — Information interchange — Representation of dates and times
* ISO 8601:2000<ref>[https://www.iso.org/standard/26780.html ISO 8601:2000 - Data elements and interchange formats -- Information interchange -- Representation of dates and times]</ref> 同上
* ISO 8601:2004<ref>[https://www.iso.org/standard/40874.html ISO 8601:2004 - Data elements and interchange formats -- Information interchange -- Representation of dates and times]</ref> 同上
* ISO 8601-1:2019 (Date and time -- Representations for information interchange -- Part 1: Basic rules)<ref>[https://www.iso.org/standard/70907.html ISO 8601-1:2019 - Date and time -- Representations for information interchange -- Part 1: Basic rules]</ref> および ISO 8601-2:2019 (Date and time -- Representations for information interchange -- Part 2: Extensions)<ref>[https://www.iso.org/standard/70908.html ISO 8601-2:2019 - Date and time -- Representations for information interchange -- Part 2: Extensions]</ref> の2分冊(2019年2月発行。2021年時点の最新版)
* ISO 8601-1:2019/Amd 1:2022 (Date and time — Representations for information interchange — Part 1: Basic rules — Amendment 1: Technical corrections)<ref>[https://www.iso.org/standard/81801.html ISO 8601-1:2019/Amd 1:2022 Date and time — Representations for information interchange — Part 1: Basic rules — Amendment 1: Technical corrections]</ref>


== 基本形式と拡張形式 ==
== 基本形式と拡張形式 ==
17行目: 31行目:
|}
|}


基本形式(基本表記・標準表記)と拡張形式(拡張表記)の2種類の表記方法があり、いずれも日付と時刻を'''T'''記号で区切る。
基本形式(基本表記・標準表記)と拡張形式(拡張表記)の2種類の表記方法があり、いずれも日付と時刻を記号 '''T''' で区切る。

基本形式は、日付と時刻それぞれの表記内には区切りを入れない。例えば、いま、年=YYYY(4桁の数字。グレゴリオ暦)、月=MM(2桁の数字。以下同様)、日=DD、時=hh、分=mm、秒=ss あって[[協定世界時|協定世界時(UTC)]]よりも09時間00分早い日本のような地域での表記は、基本形式では YYYYMMDDThhmmss+0900 となる。現地時刻は協定世界時にタイムゾーンの値を加減算した値になる。

拡張形式は、日付と時刻それぞれの表記内に区切りを入れ視認性を良好にした表記方法である。まず、年を表す4桁の数字の直後の[[ハイフン]] ('''-''') 区切りで、元号などのローカルな年月日表記ではないことを明らかにする。続く月と日の表記をハイフン ('''-''') で区切る。基本形式と同様に日付と時刻を記号 '''T''' で区切り、時分秒の表記は[[コロン (記号)|コロン]] (''':''') で区切る。

末尾に、UTCならば記号 '''Z''' を付ける。他の[[時間帯 (標準時)|タイムゾーン]]ならば[[プラス記号]] ('''+''') または[[マイナス記号]] ('''−''') で区切り、続けて時差を書く。拡張形式では、上記の例の場合は、YYYY-MM-DDThh:mm:ss+09:00 となる。


年月日と時分秒それぞれの区切りの符号には、ISOおよびJISによらない一般の慣習として、斜線「/」(2022/09/27)またはピリオド「.」(2022.09.27)が使われることがある。しかし、ISOおよびJISに従う場合、日付の表記では区切り記号にハイフン「'''-'''」'''だけ'''を用い、時刻の表記では区切り記号にコロン「''':'''」'''だけ'''を用いる。ただし、日本において[[元号]]による年を表記する場合は、JIS X 0301に基づき、令04.09.27 または R04.09.27 のように'''ピリオド'''を用いる([[#国家規格による拡張]])。
基本形式は、日付と時刻の表記内には区切りを入れない。例えば、いま、年=YYYY(4桁の数字。グレゴリオ暦)、月=MM(2桁の数字。以下同様)、日=DD、時=hh、分=mm、秒=ssで[[協定世界時|協定世界時(UTC)]]よりも09時間00分早い地域であると仮定すると、基本形式では YYYYMMDDThhmmss+0900 となる。


日付と時刻の組合せにおいて基本形式と拡張形式との混在は許されず、どちらかに統一されていなければならない。
拡張形式は、日付と時刻の表記内に区切りを入れ視認性を良好にした表記方法である。まず、年を表す4桁の数字の直後の[[ハイフン]] ('''-''') 区切りで、欧米等のローカルな年月日表記ではないことを明らかにする。続く月と日の表記をハイフン ('''-''') で区切る。基本形式と同様に日付と時刻を'''T'''記号で区切り、時分秒の表記は[[コロン]] (''':''') で区切る。末尾にUTCであれば'''Z'''記号、他の[[時間帯 (標準時)|タイムゾー]]ならば[[プラス記号]] ('''+''') あるいは[[マイナス記号]] ('''-''') で区切って続ける。拡張形式では、上記例の場合は、YYYY-MM-DDThh:mm:ss+09:00 となる。


[[プログラミング言語]]の多くが拡張形式の日付を処理するようになっている。基本形式にも対応するものは必ずしも多くない。
日付と時刻の組合せにおいて基本形式と拡張形式との混在は許されず、どちらかに統一されていなければならない。


== 起点 ==
== 起点 ==
[[グレゴリオ暦]]による年月日は、パリにおける[[メートル条約]]の調印年月日を[[1875年]][[5月20日]]とすることで規定されている<ref>[https://www.loc.gov/standards/datetime/ISO_DIS%208601-1.pdf] 3.2 Time scales、The Gregorian calendar has a reference point that assigns 20 May 1875 to the calendar day that the “Convention du Mètre” was signed in Paris.、p.14</ref>。
[[グレゴリオ暦]]による年月日は、パリにおける[[メートル条約]]の調印年月日を[[1875年]][[5月20日]]とすることによってされている<ref>[https://www.loc.gov/standards/datetime/ISO_DIS%208601-1.pdf] 3.2 Time scales、The Gregorian calendar has a reference point that assigns 20 May 1875 to the calendar day that the “Convention du Mètre” was signed in Paris.、p.14</ref>。


[[曜日]]は、[[2000年]][[1月1日]]を[[土曜日]]とすることで規定されている<ref>[https://www.loc.gov/standards/datetime/ISO_DIS%208601-1.pdf] 3.2.2 The week calendar、The reference point of the time scale assigns Saturday to 1 January 2000.、p.15</ref>。
[[曜日]]は、[[2000年]][[1月1日]]を[[土曜日]]とすることによってされている<ref>[https://www.loc.gov/standards/datetime/ISO_DIS%208601-1.pdf] 3.2.2 The week calendar、The reference point of the time scale assigns Saturday to 1 January 2000.、p.15</ref>。

週の最初の日は、月曜日である<ref>JIS X0301:2002 情報交換のためのデータ要素及び交換形式ー日付及び時刻の表記、p.21、附属書A「統一的な週の番号付けのためには、週の最初の日を一意に決める必要がある。商業目的(会計、計画、その他の週を用いる可能性のある分野)には、週の開始として月曜日が最も適切であることが分かった。」、官報公示2002年8月20日</ref>。


月日、時分秒の起点の指定は特にない。
月日、時分秒の起点の指定は特にない。
35行目: 57行目:
ISO 8601 では[[日付]]の指定の仕方に、年と月と日を指定する方法、年と年内の日の番号を指定する方法、年と週と曜日を指定する方法の3つがある(下記に詳説)。
ISO 8601 では[[日付]]の指定の仕方に、年と月と日を指定する方法、年と年内の日の番号を指定する方法、年と週と曜日を指定する方法の3つがある(下記に詳説)。


=== 年の表記(0000年~9999年) ===
日付の表記には[[グレゴリオ暦]]を用いこれはグレゴリオ暦が導入された[[1582年]][[10月15日]]以前にも適用される([[先発グレゴリオ暦]])。ただし、'''0000'''年から'''1582'''年の範囲は、事前に通信の送信側と受信側との間での合意がある場合にのみ使うことができる<ref>[https://www.loc.gov/standards/datetime/ISO_DIS%208601-1.pdf] p.20、Values in the range [0000] through [1582] shall only be used by mutual agreement of the partners in information interchange.</ref>。一般(たとえば[[Java]][[ライブラリ]])には1582年以前の日付表現は[[ユリウス暦]]と解釈されるが、ISO 8601 にはそのような措置はない。そのため、それらの日付表現をこのISO準拠にするにはグレゴリオ暦への換算が必要である。
日付の表記には[[グレゴリオ暦]]を用いる。これはグレゴリオ暦が導入された[[1582年]][[10月15日]]以前にも適用される(「[[先発グレゴリオ暦]]」も参照)。ただし、'''0000'''年から'''1582'''年の範囲は、事前に通信の送信側と受信側との間での合意がある場合にだけ使うことができる<ref>[https://www.loc.gov/standards/datetime/ISO_DIS%208601-1.pdf] p.20、Values in the range [0000] through [1582] shall only be used by mutual agreement of the partners in information interchange.</ref>。一般(たとえば[[Java]][[ライブラリ]])には1582年以前の日付表現は[[ユリウス暦]]と解釈されるが、ISO 8601 にはそのような措置はない。そのため、それらの日付表現をこのISO準拠にするにはグレゴリオ暦への換算が必要である。


年は(基本形式の場合でも拡張形式の場合でも)4桁の数字で表記される。
年は(基本形式の場合でも拡張形式の場合でも)4桁の数字で表記される。


=== 年の表記(0000年より前、9999年より後) ===
* 0000年より前または9999年より後の年を表記する場合には、事前に通信の送信側と受信側との間での合意が必要である<ref>[https://www.loc.gov/standards/datetime/ISO_DIS%208601-1.pdf] 3.5 Expansion p.19</ref>。例えば、先頭に正負の符号('''+'''あるいは'''-''')を付して任意の桁数の数字を追加することができるという合意などである(任意の桁数の追加であるため年の桁数は5桁以上(正負の符号を含めると6桁以上)になりうる。)。なお、拡張表記の場合、事前の合意次第では'''+019332'''が有効であっても'''+000299'''は無効という場合がありうる。([[西暦10000年問題]]も参照)
* 0000年より前または9999年より後の年を表記する場合には、事前に通信の送信側と受信側との間での合意が必要である<ref>[https://www.loc.gov/standards/datetime/ISO_DIS%208601-1.pdf] 3.5 Expansion p.19</ref>。例えば、先頭に正負の符号('''+'''あるいは'''-''')を付して任意の桁数の数字を追加することができるという合意などである(任意の桁数の追加であるため年の桁数は5桁以上(正負の符号を含めると6桁以上)になりうる。)。なお、拡張表記の場合、事前の合意次第では'''+019332'''が有効であっても'''+000299'''は無効という場合がありうる。([[西暦10000年問題]]も参照)
* 年の表記は '''0001''' が[[1年|西暦1年]]を表し、'''0000''' は[[紀元前1年]]、'''-0001''' は[[紀元前2年]]である。これは本来の[[紀年法]]において[[0年#西暦0年|西暦0年]]が存在しないためである(ちなみに0[[世紀]]も存在しない)。
* 年の表記は '''0001''' が[[1年|西暦1年]]を表し、'''0000''' は[[紀元前1年]]、'''-0001''' は[[紀元前2年]]、'''-0002''' は[[紀元前3年]]である([[天文学的紀年法]]と同じ)。これは通常の[[西暦]]に[[0年#西暦0年|西暦0年]]が存在しないためである(ちなみに0[[世紀]]も存在しない)。


=== 月の表記 ===
月の表記は '''01''' から '''12''' の値を取り、それぞれ[[1月]]から[[12月]]を表す。
月の表記は '''01''' から '''12''' の値を取り、それぞれ[[1月]]から[[12月]]を表す。


54行目: 79行目:
| colspan="2"|
| colspan="2"|
|}
|}
'''''YYYYMMDD'''''(基本形式)あるいは '''''YYYY-MM-DD'''''(拡張形式) のいずれかで表記される。「年」が最初に来ていることを明らかにするため、また視認性を良くするため、この拡張表記がれている。
'''''YYYYMMDD'''''(基本形式)または '''''YYYY-MM-DD'''''(拡張形式) のいずれかで表記される。「年」が最初にることを明らかにするため、また視認性を良くするため、この拡張表記がよくいられている。
* 例:
* 例:
** '''20000401'''(基本形式)および '''2000-04-01''' (拡張形式)はいずれも200041日を表す。
** '''20220904'''(基本形式)および '''2022-09-04'''(拡張形式)はいずれも202294日を表す。


'''''YYYY-MM''''' のみで'''''-DD''''' を省くことも、 '''''YYYY''''' のみで '''''MMDD'''''('''''-MM-DD''''') を省くことも可能であり、その場合、前者は年月のみを、後者は年のみを表す。ただし、'''''YYYYMM''''' というような‐(ハイフン)数字6桁のみの表記は認められていない。
'''''YYYY-MM''''' だけにして '''''-DD''''' を省くことも、'''''YYYY''''' だけにして '''''MMDD'''''('''''-MM-DD''''') を省くことも可能であり、その場合、前者は年月だけを、後者は年だけを表す。ただし、'''''YYYYMM''''' というようなハイフン(-数字6桁だけの表記は認められていない。
* 例:
* 例:
** '''2004-04'''
** '''2004-04'''
65行目: 90行目:
**: 2004年
**: 2004年
** '''20'''
** '''20'''
**: 2000年代(2000年から2099年までの100年間。原文はcenturyと表現されているが[[21世紀]](2001年から2100年まで)の100年間より1年ほど前へずれている100年間である。[[日本工業規格|JIS]] X 0301ではcenturyを百年代と訳している
**: 2000年代。ただし、2000年から2099年までの100年間であり、[[21世紀]](2001年から2100年まで)の100年間より1年前へずれている100年間である。原文ではcenturyと表現されているため注意が必要である([[日本工業規格|JIS]] X 0301ではcenturyを百年代と訳している)


=== 年と年内の日の番号 ===
=== 年と年内の日の番号 ===
75行目: 100行目:


=== 年と週と曜日 ===
=== 年と週と曜日 ===
この記法では、年が、通常の場合の年とは異なる年になる場合がある。[[POSIX]]のstrftimeにある'''%G'''はこの記法の年を表する。'''JIS X 0301'''にも具体例の例示がある。
この記法では、年が、通常の場合の年とは異なる年になる場合がある。[[POSIX]]のstrftimeにある'''%G'''はこの記法の年を表する。'''JIS X 0301'''にも具体例の例示がある。


'''''YYYY-''W''ww-D''''' と表記する。'''ww''' は年内の暦週の番号で、年の第1週は '''01'''、最終週は '''52''' または '''53''' となる。
'''''YYYY-''W''ww-D''''' と表記する。'''''ww''''' は年内の暦週の番号で、年の第1週は '''01'''、最終週は '''52''' または '''53''' となる。
* '''''D''''' は曜日を表し、月曜日が '''1'''、日曜日は '''7''' である。「8」「9」は表記数値とされない(エラー扱い)。
* '''''D''''' は曜日を表し、月曜日が '''1'''、日曜日は '''7''' である。「8」「9」は表記数値とされない(エラー扱い)。
* 例:
* 例:
86行目: 111行目:


* 「その年の第1週は、1月4日を含む週である。」としても、基準としては等しい。
* 「その年の第1週は、1月4日を含む週である。」としても、基準としては等しい。
* 具体例を以下に示す。年初において以下の曜日に該当する場合、その日は'''新年第1週の日としてではなく'''、'''年最終週の日として'''扱う。
* 具体例を以下に示す。年初において以下の曜日に該当する場合、その日は新年第1週の日としてではなく、'''年最終週の日'''として扱う。
** 1月1日[[金曜日]]・1月2日[[土曜日]]・1月3日[[日曜日]]
** 1月1日[[金曜日]]・1月2日[[土曜日]]・1月3日[[日曜日]]
** 1月1日土曜日・1月2日日曜日
** 1月1日土曜日・1月2日日曜日
** 1月1日日曜日
** 1月1日日曜日
* 同様に、年末において以下の曜日に該当する場合、その日は'''旧年最終週の日としてではなく'''、'''年第1週の日として'''扱う。
* 同様に、年末において以下の曜日に該当する場合、その日はその最終週の日としてではなく、'''次の第1週の日'''として扱う。
** 12月31日[[月曜日]]
** 12月31日[[月曜日]]
** 12月30日月曜日・12月31日[[火曜日]]
** 12月30日月曜日・12月31日[[火曜日]]
96行目: 121行目:


== 時刻 ==
== 時刻 ==
時刻の表現は、[[24時制]]だけが規定されている。[[12時制]]のオプションは存在しない。
時刻の表記は '''''hh'':''mm'':''ss''''' の形式が用いられる。'''''hh''''' は時で '''00''' から '''24''' の値をとる。'''''mm''''' は分で '''00''' から '''59''' の値をとる。'''''ss''''' は秒で '''00''' から '''59''' 及び閏秒に '''60''' の値をとる。'''''ss''''', '''''mm'':''ss''''' の部分は省略可能で '''''hh'':''mm''''', '''''hh'''''の形式も使用可能。
表記は '''''hh'':''mm'':''ss''''' の形式である。'''''hh''''' は時で '''00''' から '''24''' の値をとる。'''''mm''''' は分で '''00''' から '''59''' の値をとる。'''''ss''''' は秒で '''00''' から '''59''' 及び閏秒に '''60''' の値をとる。'''''ss''''', '''''mm'':''ss''''' の部分は省略可能で '''''hh'':''mm''''', '''''hh''''' の形式も使用可能である


最も下の要素では小数値を用いることができる。小数点にはコンマ<!-- ←JISでの名称--> (''',''') が推奨されており、ピリオド ('''.''') を用いることもできる。
最も下の要素(秒だけに限らない。)では小数値を用いることができる。[[小数点]]には[[コンマ]] ( ''',''' ) ([[小数点#フランス式|フランス式]])が推奨されているが[[終止符|ピリオド]] ( '''.''' ) ([[小数点#イギリス式|イギリス式]])を用いることもできる。日本ではピリオド( '''.''' )を用いることがほとんである。
* 例(いずれも小数点はピリオド):
* 例:
** '''11:30:30,5''' ('''113030,5''')
** '''18:30:09.57''' ('''183009.57''')
**: 1130分30.5
**: 18時30分09.57
** '''11:30,5''' ('''1130,5''')
** '''18:30.25''' ('''1830.25''')
**: 18時30.25分 = 18時30分15秒
**: '''11:30:30''' と等価
** '''11,5'''
**: '''18:30:15''' と等価
**: '''11:30''' と等価。
** '''18.7225'''
**: 18.7225時 = 18時43分21秒
**: '''18:43:21''' と等価


日の変わり目の表し方は2通り以上あり、'''00:00''' と '''24:00''', '''24:00:00''' などで表すことができるが、'''00:00'''は日の初めで '''24:00''' は日の終わりを表す('''2004-03-31T24:00Z''' は '''2004-04-01T00:00Z''' と同じ時刻を表す)。
日の変わり目の表し方は2通り以上あり、'''00:00''' と '''24:00''', '''24:00:00''' などで表すことができるが、'''00:00'''は日の初めで '''24:00''' は日の終わりを表す('''2004-03-31T24:00Z''' は '''2004-04-01T00:00Z''' と同じ時刻を表す)。


== 日付と時刻の組合せ ==
== 日付と時刻の組合せ ==
'''''<date1>''''' T '''''<time1>''''' のように日付と時刻の間に'''T'''を挟んで表記する。(例:'''2004-04-01T00:00:01+09:00'''=2004年04月01日00時00分01秒([[正午]])([[日本標準時|JST]])
'''''<date1>''''' T '''''<time1>''''' のように日付と時刻の間に'''T'''を挟んで表記する。(例:'''2004-04-01T00:00:01+09:00'''=2004年04月01日00時00分01秒([[日本標準時|JST]])


=== タイムゾーン指定子 ===
=== タイムゾーン指定子 ===
117行目: 145行目:
* 例:
* 例:
** '''2004-04-01T12:00Z''' ('''20040401T1200Z''')
** '''2004-04-01T12:00Z''' ('''20040401T1200Z''')
**: 2004年4月1日12時00分([[正午]])([[UTC]])
**: 2004年4月1日12時00分([[UTC]])
; UTC以外の[[時間帯 (標準時)|タイムゾーン(時間帯)]]
; UTC以外の[[時間帯 (標準時)|タイムゾーン(時間帯)]]
UTCより先に進んでいる時間帯の場合はプラス(+)、UTCより後に遅れている時間帯の場合はマイナス(-)として、時刻の後ろに '''±''hh'':''mm''''', '''±''hhmm''''', '''±''hh''''' のいずれかを添えることにより、その時間帯(タイムゾーン)でのローカル時刻を示すことができる
UTCより先に進んでいる時間帯の場合はプラス(+)、UTCより後に遅れている時間帯の場合はマイナス()として、時刻の後ろに '''±''hh'':''mm''''', '''±''hhmm''''', '''±''hh''''' のいずれかを添えることにより、表記の時刻がその時間帯(タイムゾーン)でのローカル時刻であることを示す。
* 例:
* 例:
** '''2004-04-01T12:00+09:00''' ('''20040401T1200+0900''')
** '''2004-04-01T12:00+09:00''' ('''20040401T1200+0900''')
**: 2004年4月1日12時00分([[正午]])([[日本標準時|JST]])
**: 2004年4月1日12時00分([[日本標準時|JST]])


== 継続時間 ==
== 継続時間 ==
145行目: 173行目:
**''S'' は秒の指定子であり、秒を表す数値の後に置かれる。
**''S'' は秒の指定子であり、秒を表す数値の後に置かれる。


たとえば、'''P3Y6M4DT12H30M5S'''は、「3年、6月、4日、12時間、30分、5秒」という継続時間を表現している。
たとえば、'''P3Y6M4DT12H30M5S'''は、「3年、6月、4日、12時間、30分、5秒」という継続時間を表現している。


指定子を含む日付と時間の要素は、その値が0の時には省略することができる。より低い順序の要素も度を削減するために省略することができる。たとえば、'''P23DT23H'''と'''P4Y'''は、ともに許される継続期間の表現である。しかし、少なくとも1つの要素は表さなければならないため、'''P'''は0秒という継続時間の表現としては不正である。しかし、'''PT0S'''や'''P0D'''は、ともに有効であり、同じ継続時間を表現している。
指定子を含む日付と時間の要素は、その値が0の時には省略することができる。より低い順序の要素も度を削減するために省略することができる。たとえば、'''P23DT23H'''と'''P4Y'''は、ともに許される継続期間の表現である。少なくとも1つの要素は表さなければならないため、'''P'''は継続時間の表現としては不正である。'''PT0S'''や'''P0D'''は、ともに有効であり、同じ継続時間を表現している。


曖昧さを解消するため、'''P1M'''は1月の継続時間であり、'''PT1M'''は1分の継続時間である(時間指定子の'''T'''が時間の値の前に置かれていことに注意)。使用される最小の、半年を表現する'''P0.5Y'''のように、小数を含むこともできる。'''P0,5Y'''や'''P0.5Y'''のように、小数点は[[カンマ]]と[[フルストップ]]のいずれも使用できる。標準は、下に述べる例外を除いて、日付と時間の継続時間表現において「繰り上がり点」を越えることを禁止してはいない。したがって、'''PT36H'''という表現を'''P1DT12H'''と同じ継続時間を表現するために使用することも可能である。ただし、[[夏時間|サマータイム]]を切り替えた時に'''PT36H'''は'''P1DT12H'''と同じではなくなることに留意する必要がある。
'''P1M'''は1月の継続時間であり、'''PT1M'''は1分の継続時間である(時間指定子の'''T'''が時間の値の前に置かれる)。使用単位のうちさいにものに、半年を表現する'''P0.5Y'''のように、小数を含むこともできる。'''P0,5Y'''や'''P0.5Y'''のように、小数点は[[カンマ]]と[[フルストップ]]のいずれも使用できる。標準は、下に述べる例外を除いて、日付と時間の継続時間表現において「繰り上がり点」を越えることを禁止してはいない。したがって、'''PT36H'''という表現を'''P1DT12H'''と同じ継続時間を表現するために使用することも可能である。ただし、[[夏時間|サマータイム]]を切り替えた時に'''PT36H'''は'''P1DT12H'''と同じではなくなることに留意する必要がある。


上記の表現の他に、通信者間の合意の元、日付と時間の表現に基づく継続時間のフォーマットを使用することも許されている。基本のフォーマットとしては、'''PYYYYMMDDThhmmss'''、または、拡張フォーマットとしては、'''{{nowrap|P[YYYY]-[MM]-[DD]T[hh]:[mm]:[ss]}}'''が使用できる。しかし、日付と時間のそれぞれの値は、[[モジュラ演算|モジュロ演算における法]]を超えることは許されない(たとえば、月の値として13、時間の値として25などは許されない)<ref>ISO 8601:2004 section 4.4.3.3 Alternative format</ref>。
上記の表現の他に、通信者間の合意の元、日付と時間の表現に基づく継続時間のフォーマットを使用することも許されている。基本のフォーマットとしては、'''PYYYYMMDDThhmmss'''、または、拡張フォーマットとしては、'''{{nowrap|P[YYYY]-[MM]-[DD]T[hh]:[mm]:[ss]}}'''が使用できる。しかし、日付と時間のそれぞれの値は、[[モジュラ演算|モジュロ演算における法]]を超えることは許されない(たとえば、月の値として13、時間の値として25などは許されない)<ref>ISO 8601:2004 section 4.4.3.3 Alternative format</ref>。
155行目: 183行目:
標準では、継続時間は、次のセクションで説明する時間の期間の一部として記述されているものの、継続時間のフォーマットは時間の期間とは独立したものとして広く使用されている<ref>{{cite web|title=Java 8 Class Duration|url=https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html#parse-java.lang.CharSequence-|website=Java Platform Standard Edition 8|publisher=Oracle|accessdate=7 October 2017}}</ref><ref>{{cite web|title=Amazon Alexa Duration|url=https://developer.amazon.com/docs/custom-skills/slot-type-reference.html#duration|website=Amazon Developer|publisher=Amazon.com|accessdate=7 October 2017}}</ref>。
標準では、継続時間は、次のセクションで説明する時間の期間の一部として記述されているものの、継続時間のフォーマットは時間の期間とは独立したものとして広く使用されている<ref>{{cite web|title=Java 8 Class Duration|url=https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html#parse-java.lang.CharSequence-|website=Java Platform Standard Edition 8|publisher=Oracle|accessdate=7 October 2017}}</ref><ref>{{cite web|title=Amazon Alexa Duration|url=https://developer.amazon.com/docs/custom-skills/slot-type-reference.html#duration|website=Amazon Developer|publisher=Amazon.com|accessdate=7 October 2017}}</ref>。


== 期間 ==
== 期間、時間間隔 ==
期間('''time interval'''<ref>3.1.1.6 time interval. part of the time axis (3.1.1.4) limited by two instants (3.1.1.3) and, unless otherwise stated, the limiting instants themselves [https://www.iso.org/standard/70907.html ISO 8601-1:2019]</ref>)は"'''開始日時/終了日時'''"で表記される。それぞれの日時は上述の日付あるいはそれに付属した時刻によって表記され、その2つの時刻の間に半角スラッシュ ("/") を挿入する。
期間('''time interval'''<ref>3.1.1.6 time interval. part of the time axis (3.1.1.4) limited by two instants (3.1.1.3) and, unless otherwise stated, the limiting instants themselves [https://www.iso.org/standard/70907.html ISO 8601-1:2019]</ref>)は"'''開始日時/終了日時'''"で表記される。それぞれの日時は上述の日付あるいはそれに付属した時刻によって表記され、その2つの時刻の間に半角スラッシュ ("/") を挿入する。
* 例:
* 例:
172行目: 200行目:
**: 2004年4月の1日から15日まで
**: 2004年4月の1日から15日まで


=== 繰り返し間隔 ===
== 国家標準による拡張 ==
インターバルは "R[n]/" を先頭に付ける。nは繰り返し回数を意味する。[n]を省略した場合、または-1を指定すると無制限の繰り返しとみなされる。0の場合繰り返されないことを意味する。
=== 日本 (JIS X 0301) ===
[[日本業規格]] JIS X 0301(旧JIS C 6262)があり、ISO 8601:2000 の翻訳が{{cite jis|X|0301|2002|name=情報交換のためのデータ要素及び交換形式 ― 日付及び時刻の表記|link=no}}(英語題はISO 8601に同じ)に収められている。


例えば、"P1Y2M10DT2H30M" という継続時間を5回繰り返す場合、"R5/2008-03-01T13:00:00Z/P1Y2M10DT2H30M"になる。
規格では、[[和暦]](規格書では「元号による日付」)が規定されている。


== 国家規格による拡張 ==
=== 日本 (JIS X 0301) ===
[[日本業規格]] JIS X 0301(旧JIS C 6262)があり、ISO 8601:2000 の翻訳が{{cite jis|X|0301|2002|name=情報交換のためのデータ要素及び交換形式 ― 日付及び時刻の表記|link=no}}(英語題はISO 8601に同じ)に収められている。

規格では、「元号による日付」([[和暦]])が規定されている。
[[元号]]は「[[明治|明]]」「[[大正|大]]」「[[昭和|昭]]」「[[平成|平]]」「[[令和|令]]」または「M」「T」「S」「H」「R」<ref>[https://www.meti.go.jp/press/2019/05/20190520006/20190520006-2.pdf 日付及び時刻の表記を規定する JIS に「令和」を追加] 経済産業省 産業技術環境局 国際電気標準課、2019年5月20日
[[元号]]は「[[明治|明]]」「[[大正|大]]」「[[昭和|昭]]」「[[平成|平]]」「[[令和|令]]」または「M」「T」「S」「H」「R」<ref>[https://www.meti.go.jp/press/2019/05/20190520006/20190520006-2.pdf 日付及び時刻の表記を規定する JIS に「令和」を追加] 経済産業省 産業技術環境局 国際電気標準課、2019年5月20日
</ref>るいは[[メタ文字]]Nで表される。[[元治]]、[[慶応]]など明治よりも前の元号についての規定はない。
</ref>り、これらを[[メタ]]文字 ''N'' で表。[[元治]]、[[慶応]]など明治よりも前の元号についての規定はない。


日付は、基本形式「YY.MM.DD」または拡張形式「NYY.MM.DD」で表される(元号での年も「YY」である)。年月日のセパレータは[[ハイフン]]ではなく[[終止符|ピリオド]]である(西暦年月日の場合は、2019-06-23のように[[ハイフン]]で区切る)。この[[終止符|ピリオド]]は、基本形式においても省略されない。
日付は、基本形式「YY.MM.DD」または拡張形式「''N''YY.MM.DD」で表される(元号での年も「YY」である)。このとき、年月日は2桁とし、1桁目ゼロ省略できない。年月日の区切り記号は'''[[ハイフン]]ではなく[[終止符|ピリオド]]である'''(西暦年月日の場合は、2019-06-23のように[[ハイフン]]で区切る)。この[[終止符|ピリオド]]は、基本形式においても省略できない。
* 例:
* 例:
** H16.04.01、R02.06.23
** H16.04.01、R02.06.23
** 平16.04.01、令02.06.23
** 平16.04.01、令02.06.23


西暦を用いた場合の日付と時刻を併せた表現(例:2021-10-27T15:48:10.78)は、元号を用いる場合には規定されていない。つまり、R02.06.23T15:48:10.78 のような表現が許されるかどうかは規定されていない。
[[グレゴリオ暦]]に改暦されるM06.01.01(1873-01-01)以前の和暦は、[[暦]](規格書では「[[太陰太陽暦]])であり、この規格の適用範囲外である。M01.[[1月1日 (旧暦)|01.01]]からM05.[[12月2日 (旧暦)|12.02]]までは[[1868年]][[1月25日]]から[[1872年]][[12月31日]]までを表すとされており、(ユリウス暦時代の西暦日付の扱いとは異なり)グレゴリオ暦として解釈されることはない。なお、年初[[改元]]に基づき、明治の初日はM01.01.01である。

[[グレゴリオ暦]]に改暦されるM06.01.01(1873-01-01)以前の和暦は、[[太陰太陽暦]]([[暦]])であり、この規格の適用範囲外である。M01.[[1月1日 (旧暦)|01.01]]からM05.[[12月2日 (旧暦)|12.02]]までは[[1868年]][[1月25日]]から[[1872年]][[12月31日]]までを表すとされており、(ユリウス暦時代の西暦日付の扱いとは異なり)グレゴリオ暦として解釈されることはない。なお、[[改元#改元の基準点|立年改元]]に基づき、明治の初日はM01.01.01である。


=== 台湾 (CNS 7648) ===
=== 台湾 (CNS 7648) ===
{{仮リンク|中華民国国家標準|en|Chinese National Standards|zh|中華民國國家標準}} CNS 7648「資料元及交換格式・資訊交換・日期及時間的表示法」では、[[民国紀元]]が「R.O.C.」で表される。
{{仮リンク|中華民国国家標準|en|Chinese National Standards|zh|中華民國國家標準}} CNS 7648「資料元及交換格式・資訊交換・日期及時間的表示法」では、[[民国紀元]]が「R.O.C.」で表される。

* 例:
例:
** R.O.C.93-04-01
* R.O.C.93-04-01


== プログラミング言語での実装 ==
== プログラミング言語での実装 ==
ほとんどの[[プログラミング言語]]で標準ライブラリに入っているかライブラリがある。例えば、[[Java]] の場合は java.time パッケージにて<ref>[https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/package-summary.html java.time (Java SE 11 & JDK 11 )]</ref>、[[.NET Framework]] はラウンドトリップ書式指定子にて<ref>[https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/standard-date-and-time-format-strings#Roundtrip ラウンドトリップ ("O"、"o") 書式指定子 - 標準の日時書式指定文字列 | Microsoft Docs]</ref>、[[JavaScript]] は Date.toISOString() などで<ref>[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString Date.prototype.toISOString() - JavaScript | MDN]</ref>、[[Python]] は datetime.isoformat() など<ref>[https://docs.python.org/ja/3/library/datetime.html#datetime.datetime.isoformat datetime --- 基本的な日付型および時間型 — Python 3 ドキュメント]</ref>で扱える。
ほとんどの[[プログラミング言語]]で、日付および時刻を扱う方法は標準ライブラリに入っているか、別のライブラリがある。例えば、[[Java]] の場合は java.time パッケージで扱い<ref>[https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/package-summary.html java.time (Java SE 11 & JDK 11 )]</ref>、[[.NET Framework]] はラウンドトリップ書式指定子<ref>[https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/standard-date-and-time-format-strings#Roundtrip ラウンドトリップ ("O"、"o") 書式指定子 - 標準の日時書式指定文字列 | Microsoft Docs]</ref>、[[JavaScript]] は Date.toISOString() などで<ref>[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString Date.prototype.toISOString() - JavaScript | MDN]</ref>、[[Python]] は datetime.isoformat() など<ref>[https://docs.python.org/ja/3/library/datetime.html#datetime.datetime.isoformat datetime --- 基本的な日付型および時間型 — Python 3 ドキュメント]</ref>で扱える。


== 脚注 ==
== 脚注 ==
{{脚注ヘルプ}}
{{脚注ヘルプ}}
=== 注釈 ===
{{Reflist}}
{{Notelist2}}
=== 出典 ===
{{Reflist|2}}


== 関連項目 ==
== 関連項目 ==
208行目: 246行目:
* [https://www.iso.org/standard/70907.html ISO 8601-1:2019 - Date and time -- Representations for information interchange -- Part 1: Basic rules] {{en icon}}
* [https://www.iso.org/standard/70907.html ISO 8601-1:2019 - Date and time -- Representations for information interchange -- Part 1: Basic rules] {{en icon}}
* [https://www.iso.org/standard/70908.html ISO 8601-2:2019 - Date and time -- Representations for information interchange -- Part 2: Extensions] {{en icon}}
* [https://www.iso.org/standard/70908.html ISO 8601-2:2019 - Date and time -- Representations for information interchange -- Part 2: Extensions] {{en icon}}
* [https://www.iso.org/standard/81801.html ISO 8601-1:2019/Amd 1:2022 - Date and time — Representations for information interchange — Part 1: Basic rules — Amendment 1: Technical corrections]
* [https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601 Date and time format] {{en icon}}
* [https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601 Date and time format] {{en icon}}
* RFC 3339 - 細かい差異は存在するが、ほぼ同じ [[IETF]] による規格。 {{en icon}}
* {{IETF RFC|3339}} - 細かい差異は存在するが、ほぼ同じ [[IETF]] による規格。 {{en icon}}
* [https://www.w3.org/QA/Tips/iso-date Use international date format (ISO) - Quality Web Tips] - [[W3C|The World Wide Web Consortium (W3C)]] {{en icon}}
* [https://www.w3.org/QA/Tips/iso-date Use international date format (ISO) - Quality Web Tips] - [[W3C|The World Wide Web Consortium (W3C)]] {{en icon}}
* {{cite jis|X|0301|2002|name=情報交換のためのデータ要素及び交換形式 ― 日付及び時刻の表記}}
* {{cite jis|X|0301|2002|name=情報交換のためのデータ要素及び交換形式 ― 日付及び時刻の表記}}
* [https://wiki.suikawiki.org/n/ISO%208601 ISO 8601] suikawiki。 ISO 8601規格についての極めて詳細な記述・解説がなされている。日時表現の厳密な実装を実現するためには参考となる。


{{Time measurement and standards}}
{{Time measurement and standards}}
218行目: 258行目:
[[Category:ISO標準|08601]]
[[Category:ISO標準|08601]]
[[Category:カレンダー標準]]
[[Category:カレンダー標準]]
[[Category:表記]]
[[Category:日時表記]]

2024年7月22日 (月) 17:06時点における最新版

ISO 8601は、日付時刻の表記に関するISOの国際規格である。この規格の主眼は、日付時刻の記述順序が国や文化によってまちまちである[注 1][1]ものを、大→小の順序(ビッグエンディアン big-endian)を貫徹して、日付・時刻の記述順序をただ一種類に標準化していることにある[2]

年月日の区切り記号は「-」(ハイフン)のみを用い、「/」などを禁じている。また時刻表現を24時制だけに限定している。

  • 2022年9月4日を、2022-09-04(拡張形式)もしくは20220904(基本形式)と表記する[注 2]
  • 2022年9月4日の時刻として 16時07分48.53秒 を併せて表記する場合は、2022-09-04T16:07:48.53(拡張形式)または20220904T160748.53(基本形式)と表記する。すなわち記号 T で区切った後に時刻を続ける。

上記以外に、日の番号暦週の番号タイムゾーン継続時間期間などの記述方法についても規定している。

日本では、これに準拠して日本産業規格JIS X 0301「情報交換のためのデータ要素及び交換形式ー日付及び時刻の表記」が定められている。JISにおいては、元号明治令和)による年の規定を追加している[3]

経緯

[編集]

規格のこれまでの経緯は次のとおりである。

  • ISO 2014:1976[4] Writing of calendar dates in all-numeric form
  • ISO 8601:1988[5] Data elements and interchange formats — Information interchange — Representation of dates and times
  • ISO 8601:2000[6] 同上
  • ISO 8601:2004[7] 同上
  • ISO 8601-1:2019 (Date and time -- Representations for information interchange -- Part 1: Basic rules)[8] および ISO 8601-2:2019 (Date and time -- Representations for information interchange -- Part 2: Extensions)[9] の2分冊(2019年2月発行。2021年時点の最新版)
  • ISO 8601-1:2019/Amd 1:2022 (Date and time — Representations for information interchange — Part 1: Basic rules — Amendment 1: Technical corrections)[10]

基本形式と拡張形式

[編集]
ISO 8601形式の時刻表記例[11]
基本形式 20240823T111423+0900
拡張形式 2024-08-23T11:14:23+09:00

基本形式(基本表記・標準表記)と拡張形式(拡張表記)の2種類の表記方法があり、いずれも日付と時刻を記号 T で区切る。

基本形式では、日付と時刻それぞれの表記内には区切りを入れない。例えば、いま、年=YYYY(4桁の数字。グレゴリオ暦)、月=MM(2桁の数字。以下同様)、日=DD、時=hh、分=mm、秒=ss であって協定世界時(UTC)よりも09時間00分早い日本のような地域での表記は、基本形式では YYYYMMDDThhmmss+0900 となる。現地時刻は協定世界時にタイムゾーンの値を加減算した値になる。

拡張形式は、日付と時刻それぞれの表記内に区切りを入れて視認性を良好にした表記方法である。まず、年を表す4桁の数字の直後のハイフン (-) 区切りで、元号などのローカルな年月日表記ではないことを明らかにする。続く月と日の表記をハイフン (-) で区切る。基本形式と同様に日付と時刻を記号 T で区切り、時分秒の表記はコロン (:) で区切る。

末尾に、UTCならば記号 Z を付ける。他のタイムゾーンならばプラス記号 (+) またはマイナス記号 () で区切り、続けて時差を書く。拡張形式では、上記の例の場合は、YYYY-MM-DDThh:mm:ss+09:00 となる。

年月日と時分秒それぞれの区切りの符号には、ISOおよびJISによらない一般の慣習として、斜線「/」(2022/09/27)またはピリオド「.」(2022.09.27)が使われることがある。しかし、ISOおよびJISに従う場合、日付の表記では区切り記号にハイフン「-だけを用い、時刻の表記では区切り記号にコロン「:だけを用いる。ただし、日本において元号による年を表記する場合は、JIS X 0301に基づき、令04.09.27 または R04.09.27 のようにピリオドを用いる(#国家規格による拡張)。

日付と時刻との組合せにおいて基本形式と拡張形式との混在は許されず、どちらかに統一されていなければならない。

プログラミング言語の多くが拡張形式の日付を処理するようになっている。基本形式にも対応するものは必ずしも多くない。

起点

[編集]

グレゴリオ暦による年月日は、パリにおけるメートル条約の調印年月日を1875年5月20日とすることによって定義されている[12]

曜日は、2000年1月1日土曜日とすることによって定義されている[13]

週の最初の日は、月曜日である[14]

月日、時分秒の起点の指定は特にない。

日付

[編集]

ISO 8601 では日付の指定の仕方に、年と月と日を指定する方法、年と年内の日の番号を指定する方法、年と週と曜日を指定する方法の3つがある(下記に詳説)。

年の表記(0000年~9999年)

[編集]

日付の表記にはグレゴリオ暦を用いる。これはグレゴリオ暦が導入された1582年10月15日以前にも適用される(「先発グレゴリオ暦」も参照)。ただし、0000年から1582年の範囲は、事前に通信の送信側と受信側との間での合意がある場合にだけ使うことができる[15]。一般(たとえばJavaライブラリ)には1582年以前の日付表現はユリウス暦と解釈されるが、ISO 8601 にはそのような措置はない。そのため、それらの日付表現をこのISO準拠にするにはグレゴリオ暦への換算が必要である。

年は(基本形式の場合でも拡張形式の場合でも)4桁の数字で表記される。

年の表記(0000年より前、9999年より後)

[編集]
  • 0000年より前または9999年より後の年を表記する場合には、事前に通信の送信側と受信側との間での合意が必要である[16]。例えば、先頭に正負の符号(+あるいは-)を付して任意の桁数の数字を追加することができるという合意などである(任意の桁数の追加であるため年の桁数は5桁以上(正負の符号を含めると6桁以上)になりうる。)。なお、拡張表記の場合、事前の合意次第では+019332が有効であっても+000299は無効という場合がありうる。(西暦10000年問題も参照)
  • 年の表記は 0001西暦1年を表し、0000紀元前1年-0001紀元前2年-0002紀元前3年である(天文学的紀年法と同じ)。これは通常の西暦紀元には西暦0年が存在しないためである(ちなみに0世紀も存在しない)。

月の表記

[編集]

月の表記は 01 から 12 の値を取り、それぞれ1月から12月を表す。

年と月と日

[編集]
YYYY-MM-DD または YYYYMMDD
YYYY-MM (YYYYMM は不可 )
YYYY

YYYYMMDD(基本形式)または YYYY-MM-DD(拡張形式) のいずれかで表記される。「年」が最初にあることを明らかにするため、また視認性を良くするために、この拡張表記がよく用いられている。

  • 例:
    • 20220904(基本形式)および 2022-09-04(拡張形式)は、いずれも2022年9月4日を表す。

YYYY-MM だけにして -DD を省くことも、YYYY だけにして MMDD(-MM-DD) を省くことも可能であり、その場合、前者は年月だけを、後者は年だけを表す。ただし、YYYYMM というようなハイフン(-)なしで数字6桁だけの表記は認められていない。

  • 例:
    • 2004-04
      2004年4月
    • 2004
      2004年
    • 20
      2000年代。ただし、2000年から2099年までの100年間であり、21世紀(2001年から2100年まで)の100年間より1年前へずれている100年間である。原文ではcenturyと表現されているため注意が必要である(JIS X 0301ではcenturyを「百年代」と訳している)。

年と年内の日の番号

[編集]

YYYY-DDD と表記する。 DDD は、年内の日の番号である。1月1日001 と表記し、12月31日平年では 365閏年では 366 になる。

  • 例:
    • 2004-092 (2004092)
      2004年の第92日目、すなわち4月1日を表す。

年と週と曜日

[編集]

この記法では、年が、通常の場合の年とは異なる年になる場合がある。POSIXのstrftimeにある%Gはこの記法の年を表記する。JIS X 0301にも具体例の例示がある。

YYYY-Www-D と表記する。ww は年内の暦週の番号で、年の第1週は 01、最終週は 52 または 53 となる。

  • D は曜日を表し、月曜日が 1、日曜日は 7 である。「8」「9」は表記数値とされない(エラー扱い)。
  • 例:
    • 2004-W14-4 (2004W144)
      2004年の第14週の木曜日、すなわち4月1日を表す。

この記法では、ある年における「最初の木曜日を含む週が、その年の第1週である。」と規定されている。

  • 「その年の第1週は、1月4日を含む週である。」としても、基準としては等しい。
  • 具体例を以下に示す。年初において以下の曜日に該当する場合、その日は新年第1週の日としてではなく、前年最終週の日として扱う。
  • 同様に、年末において以下の曜日に該当する場合、その日はその年の最終週の日としてではなく、次の年の第1週の日として扱う。

時刻

[編集]

時刻の表現は、24時制だけが規定されている。12時制のオプションは存在しない。 表記は hh:mm:ss の形式である。hh は時で 00 から 24 の値をとる。mm は分で 00 から 59 の値をとる。ss は秒で 00 から 59 及び閏秒に 60 の値をとる。ss, mm:ss の部分は省略可能で hh:mm, hh の形式も使用可能である。

最も下の要素(秒だけに限らない。)では小数値を用いることができる。小数点にはコンマ ( , ) (フランス式)が推奨されているが、ピリオド ( . ) (イギリス式)を用いることもできる。日本ではピリオド( . )を用いることがほとんである。

  • 例(いずれも小数点はピリオド):
    • 18:30:09.57 (183009.57)
      18時30分09.57秒
    • 18:30.25 (1830.25)
      18時30.25分 = 18時30分15秒
      18:30:15 と等価
    • 18.7225
      18.7225時 = 18時43分21秒
      18:43:21 と等価

日の変わり目の表し方は2通り以上あり、00:0024:00, 24:00:00 などで表すことができるが、00:00は日の初めで 24:00 は日の終わりを表す(2004-03-31T24:00Z2004-04-01T00:00Z と同じ時刻を表す)。

日付と時刻の組合せ

[編集]

<date1> T <time1> のように日付と時刻の間にTを挟んで表記する。(例:2004-04-01T00:00:01+09:00=2004年04月01日00時00分01秒(JST

タイムゾーン指定子

[編集]
協定世界時(UTC)

時刻の後ろに Z を添えることで協定世界時(UTC)での時刻をそのまま示すことができる。

  • 例:
    • 2004-04-01T12:00Z (20040401T1200Z)
      2004年4月1日12時00分(UTC
UTC以外のタイムゾーン(時間帯)

UTCより先に進んでいる時間帯の場合はプラス(+)、UTCより後に遅れている時間帯の場合はマイナス(−)として、時刻の後ろに ±hh:mm, ±hhmm, ±hh のいずれかを添えることにより、表記の時刻がその時間帯(タイムゾーン)でのローカル時刻であることを示す。

  • 例:
    • 2004-04-01T12:00+09:00 (20040401T1200+0900)
      2004年4月1日12時00分(JST

継続時間

[編集]
PnYnMnDTnHnMnS
PnW
P<date>T<time>

継続時間は、ある期間中に含まれる時間の合計を定義し、P[n]Y[n]M[n]DT[n]H[n]M[n]S、または、右に示すように、P[n]Wの形式で表される。この表記において、[n]は、それぞれの日付と時間の要素に対応する値と置換する。先頭の0は必須ではないが、各要素の数字の最大文字数は通信者間で取り決める必要がある。大文字のPYMWDTHM、およびSは、各日付と時間の要素の指定子であり、他の文字には置き換えない。

  • P は期間を表す指定子(period を表す)であり、継続時間表現の先頭に置かれる。
  • Y は年の指定子であり、年を表す数値の後に置かれる。
  • M は月の指定子であり、月を表す数値の後に置かれる。
  • W は週の指定子であり、週を表す数値の後に置かれる。
  • D は日の指定子であり、日を表す数値の後に置かれる。
  • T 時間の指定子であり、継続時間表現の時間の部分の前に置く。
    • H は時間の指定子であり、時間を表す数値の後に置かれる。
    • M は分の指定子であり、分を表す数値の後に置かれる。
    • S は秒の指定子であり、秒を表す数値の後に置かれる。

たとえば、P3Y6M4DT12H30M5Sは、「3年、6か月、4日、12時間、30分、5秒」という継続時間を表現している。

指定子を含む日付と時間の要素は、その値が0の時には省略することができる。より低い順序の要素も精度を削減するために省略することができる。たとえば、P23DT23HP4Yは、ともに許される継続期間の表現である。少なくとも1つの要素は表さなければならないため、Pは継続時間の表現としては不正である。PT0SP0Dは、ともに有効であり、同じ継続時間を表現している。

P1Mは1か月の継続時間であり、PT1Mは1分の継続時間である(時間指定子のTが時間の値の前に置かれる)。使用する単位のうち最も小さいにものに、半年を表現するP0.5Yのように、小数を含むこともできる。P0,5YP0.5Yのように、小数点はカンマフルストップのいずれも使用できる。標準は、下に述べる例外を除いて、日付と時間の継続時間表現において「繰り上がり点」を越えることを禁止してはいない。したがって、PT36Hという表現をP1DT12Hと同じ継続時間を表現するために使用することも可能である。ただし、サマータイムを切り替えた時にPT36HP1DT12Hと同じではなくなることに留意する必要がある。

上記の表現の他に、通信者間の合意の元、日付と時間の表現に基づく継続時間のフォーマットを使用することも許されている。基本のフォーマットとしては、PYYYYMMDDThhmmss、または、拡張フォーマットとしては、P[YYYY]-[MM]-[DD]T[hh]:[mm]:[ss]が使用できる。しかし、日付と時間のそれぞれの値は、モジュロ演算における法を超えることは許されない(たとえば、月の値として13、時間の値として25などは許されない)[17]

標準では、継続時間は、次のセクションで説明する時間の期間の一部として記述されているものの、継続時間のフォーマットは時間の期間とは独立したものとして広く使用されている[18][19]

期間、時間間隔

[編集]

期間(time interval[20])は"開始日時/終了日時"で表記される。それぞれの日時は上述の日付あるいはそれに付属した時刻によって表記され、その2つの時刻の間に半角スラッシュ ("/") を挿入する。

  • 例:
    • 2004-04-01/2005-07-01
      2004年4月1日から2005年7月1日まで
    • 2004-04-01T12:00:00+09:00/2007-08-31T15:00:00+09:00
      日本時間 (JST) で、2004年4月1日12時0分0秒から2007年8月31日15時0分0秒まで

なお期間の明示にあたっては、開始日時と終了日時で年あるいは年と月が同一である場合、それを省略することができる。

  • 年が同一の場合の例:
    • 2004-04-01/07-01
      2004年の4月1日から7月1日まで
  • 年と月が同一の場合の例:
    • 2004-04-01/15
      2004年4月の1日から15日まで

繰り返し間隔

[編集]

インターバルは "R[n]/" を先頭に付ける。nは繰り返し回数を意味する。[n]を省略した場合、または-1を指定すると無制限の繰り返しとみなされる。0の場合繰り返されないことを意味する。

例えば、"P1Y2M10DT2H30M" という継続時間を5回繰り返す場合、"R5/2008-03-01T13:00:00Z/P1Y2M10DT2H30M"になる。

国家規格による拡張

[編集]

日本 (JIS X 0301)

[編集]

日本産業規格 JIS X 0301(旧JIS C 6262)があり、ISO 8601:2000 の翻訳がJIS X 0301:2002「情報交換のためのデータ要素及び交換形式 ― 日付及び時刻の表記」日本産業標準調査会経済産業省)(英語題はISO 8601に同じ)に収められている。

規格では、「元号による日付」(和暦)が規定されている。 元号は「」「」「」「」「」または「M」「T」「S」「H」「R」[21]であり、これらをメタ文字 N で表す。元治慶応など明治よりも前の元号についての規定はない。

日付は、基本形式「YY.MM.DD」または拡張形式「NYY.MM.DD」で表される(元号での年も「YY」である)。このとき、年月日は2桁とし、1桁目のゼロは省略できない。年月日の区切り記号はハイフンではなくピリオドである(西暦年月日の場合は、2019-06-23のようにハイフンで区切る)。このピリオドは、基本形式においても省略できない。

  • 例:
    • H16.04.01、R02.06.23
    • 平16.04.01、令02.06.23

西暦を用いた場合の日付と時刻を併せた表現(例:2021-10-27T15:48:10.78)は、元号を用いる場合には規定されていない。つまり、R02.06.23T15:48:10.78 のような表現が許されるかどうかは規定されていない。

グレゴリオ暦に改暦されるM06.01.01(1873-01-01)以前の和暦は、太陰太陽暦旧暦)であり、この規格の適用範囲外である。M01.01.01からM05.12.02までは1868年1月25日から1872年12月31日までを表すとされており、(ユリウス暦時代の西暦日付の扱いとは異なり)グレゴリオ暦として解釈されることはない。なお、立年改元に基づき、明治の初日はM01.01.01である。

台湾 (CNS 7648)

[編集]

中華民国国家標準英語版中国語版 CNS 7648「資料元及交換格式・資訊交換・日期及時間的表示法」では、民国紀元が「R.O.C.」で表される。

例:

  • R.O.C.93-04-01

プログラミング言語での実装

[編集]

ほとんどのプログラミング言語で、日付および時刻を扱う方法は標準ライブラリに入っているか、別のライブラリがある。例えば、Java の場合は java.time パッケージで扱い[22].NET Framework はラウンドトリップ書式指定子で[23]JavaScript は Date.toISOString() などで[24]Python は datetime.isoformat() など[25]で扱える。

脚注

[編集]

注釈

[編集]
  1. ^ 西暦年を末尾の2桁で表す慣習もあるので、11/09/12(または 11.09.12)の表記は、2011-09-12(日本など)、2012-09-11(英国など)、2012-11-09(米国など)の3つの年月日の可能性がある。
  2. ^ これら以外の2022/09/04(区切りが「-」でない。)、04-09-2022または04/09/2022(リトルエンディアン)、09-04-2022または09/04/2022(ミドルエンディアン)の表記を禁止する。

出典

[編集]
  1. ^ en:Date format by country
  2. ^ date-time format by region, visualised CLDR 38.1/ISO 8601
  3. ^ JIS X 0301:2002 p.25、附属書2(参考)JISと対応する国際規格との対比表、kikakurui.com 
  4. ^ ISO 2014:1976 - Writing of calendar dates in all-numeric form
  5. ^ ISO 8601:1988 - Data elements and interchange formats -- Information interchange -- Representation of dates and times
  6. ^ ISO 8601:2000 - Data elements and interchange formats -- Information interchange -- Representation of dates and times
  7. ^ ISO 8601:2004 - Data elements and interchange formats -- Information interchange -- Representation of dates and times
  8. ^ ISO 8601-1:2019 - Date and time -- Representations for information interchange -- Part 1: Basic rules
  9. ^ ISO 8601-2:2019 - Date and time -- Representations for information interchange -- Part 2: Extensions
  10. ^ ISO 8601-1:2019/Amd 1:2022 Date and time — Representations for information interchange — Part 1: Basic rules — Amendment 1: Technical corrections
  11. ^ 日本標準時によるページ生成時刻
  12. ^ [1] 3.2 Time scales、The Gregorian calendar has a reference point that assigns 20 May 1875 to the calendar day that the “Convention du Mètre” was signed in Paris.、p.14
  13. ^ [2] 3.2.2 The week calendar、The reference point of the time scale assigns Saturday to 1 January 2000.、p.15
  14. ^ JIS X0301:2002 情報交換のためのデータ要素及び交換形式ー日付及び時刻の表記、p.21、附属書A「統一的な週の番号付けのためには、週の最初の日を一意に決める必要がある。商業目的(会計、計画、その他の週を用いる可能性のある分野)には、週の開始として月曜日が最も適切であることが分かった。」、官報公示2002年8月20日
  15. ^ [3] p.20、Values in the range [0000] through [1582] shall only be used by mutual agreement of the partners in information interchange.
  16. ^ [4] 3.5 Expansion p.19
  17. ^ ISO 8601:2004 section 4.4.3.3 Alternative format
  18. ^ Java 8 Class Duration”. Java Platform Standard Edition 8. Oracle. 7 October 2017閲覧。
  19. ^ Amazon Alexa Duration”. Amazon Developer. Amazon.com. 7 October 2017閲覧。
  20. ^ 3.1.1.6 time interval. part of the time axis (3.1.1.4) limited by two instants (3.1.1.3) and, unless otherwise stated, the limiting instants themselves ISO 8601-1:2019
  21. ^ 日付及び時刻の表記を規定する JIS に「令和」を追加 経済産業省 産業技術環境局 国際電気標準課、2019年5月20日
  22. ^ java.time (Java SE 11 & JDK 11 )
  23. ^ ラウンドトリップ ("O"、"o") 書式指定子 - 標準の日時書式指定文字列 | Microsoft Docs
  24. ^ Date.prototype.toISOString() - JavaScript | MDN
  25. ^ datetime --- 基本的な日付型および時間型 — Python 3 ドキュメント

関連項目

[編集]

外部リンク

[編集]