ISO 8601

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

ISO 8601は、日付時刻の表記に関するISOの国際規格である。

経緯

規格の最新版は2019年2月に発行された ISO 8601-1:2019 (Date and time -- Representations for information interchange -- Part 1: Basic rules)[2] および ISO 8601-2:2019 (Date and time -- Representations for information interchange -- Part 2: Extensions)[3] の2分冊。何度も改訂されていて、過去の規格は、ISO 8601:2004[4]、ISO 8601:2000[5]、ISO 8601:1988[6] があり、いずれも正式な題は Data elements and interchange formats – Information interchange – Representation of dates and times であった。更にその前身は ISO 2014:1976[7] などがあった。

基本形式と拡張形式

ISO 8601形式の時刻表記例[8]
基本形式 20210309T100616+0900
拡張形式 2021-03-09T10:06:16+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 となる。

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

起点

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

曜日は、2000年1月1日土曜日とすることで規定されている[10]

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

日付

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

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

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

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

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

年と月と日

YYYY-MM-DDまたはYYYYMMDD
YYYY-MM (YYYYMM は不可 )
YYYY

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

  • 例:
    • 20000401(基本形式)および 2000-04-01 (拡張形式)はいずれも2000年4月1日を表す。

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

  • 例:
    • 2004-04
      2004年4月
    • 2004
      2004年
    • 20
      2000年代(2000年から2099年までの100年間。原文ではcenturyと表現されているが21世紀(2001年から2100年まで)の100年間より1年ほど前へずれている100年間である。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週の日として扱う。

時刻

時刻の表記には hh:mm:ss の形式が用いられる。hh は時で 00 から 24 の値をとる。mm は分で 00 から 59 の値をとる。ss は秒で 00 から 59 及び閏秒に 60 の値をとる。ss, mm:ss の部分は省略可能で hh:mm, hhの形式も使用可能。

最も下の要素では小数値を用いることができる。小数点にはコンマ (,) が推奨されており、ピリオド (.) を用いることもできる。

  • 例:
    • 11:30:30,5 (113030,5)
      11時間30分30.5秒
    • 11:30,5 (1130,5)
      11:30:30 と等価。
    • 11,5
      11:30 と等価。

日の変わり目の表し方は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は0秒という継続時間の表現としては不正である。しかし、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などは許されない)[13]

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

期間

期間(time interval[16])は"開始日時/終了日時"で表記される。それぞれの日時は上述の日付あるいはそれに付属した時刻によって表記され、その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日まで

国家標準による拡張

日本 (JIS X 0301)

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

規格書では、和暦(規格書では「元号による日付」)が規定されている。

元号は「」「」「」「」「」または「M」「T」「S」「H」「R」[17]、あるいはメタ文字「N」で表される。元治慶応など明治よりも前の元号についての規定はない。

日付は、基本形式「YY.MM.DD」または拡張形式「NYY.MM.DD」で表される(元号での年も「YY」である)。年月日のセパレータはハイフンではなくピリオドである(西暦年月日の場合は、2019-06-23のようにハイフンで区切る)。このピリオドは、基本形式においても省略されない。

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

グレゴリオ暦に改暦される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 パッケージにて[18].NET Framework はラウンドトリップ書式指定子にて[19]JavaScript は Date.toISOString() などで[20]Python は datetime.isoformat() など[21]で扱える。

脚注

  1. JIS X0301:2002 p.25、附属書2(参考)JISと対応する国際規格との対比表、kikakurui.com 
  2. ISO 8601-1:2019 - Date and time -- Representations for information interchange -- Part 1: Basic rules
  3. ISO 8601-2:2019 - Date and time -- Representations for information interchange -- Part 2: Extensions
  4. ISO 8601:2004 - Data elements and interchange formats -- Information interchange -- Representation of dates and times
  5. ISO 8601:2000 - Data elements and interchange formats -- Information interchange -- Representation of dates and times
  6. ISO 8601:1988 - Data elements and interchange formats -- Information interchange -- Representation of dates and times
  7. ISO 2014:1976 - Writing of calendar dates in all-numeric form
  8. 日本標準時によるページ生成時刻
  9. 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
  10. 3.2.2 The week calendar、The reference point of the time scale assigns Saturday to 1 January 2000.、p.15
  11. p.20、Values in the range [0000] through [1582] shall only be used by mutual agreement of the partners in information interchange.
  12. 3.5 Expansion p.19
  13. ISO 8601:2004 section 4.4.3.3 Alternative format
  14. Java 8 Class Duration”. Java Platform Standard Edition 8. Oracle. 2017年10月7日閲覧。
  15. Amazon Alexa Duration”. Amazon Developer. Amazon.com. 2017年10月7日閲覧。
  16. 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
  17. 日付及び時刻の表記を規定する JIS に「令和」を追加 経済産業省 産業技術環境局 国際電気標準課、2019年5月20日
  18. java.time (Java SE 11 & JDK 11 )
  19. ラウンドトリップ ("O"、"o") 書式指定子 - 標準の日時書式指定文字列 | Microsoft Docs
  20. Date.prototype.toISOString() - JavaScript | MDN
  21. datetime --- 基本的な日付型および時間型 — Python 3 ドキュメント

関連項目

外部リンク

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.