ISO 8601

提供: miniwiki
2018/9/27/ (木) 22:42時点におけるAdmin (トーク | 投稿記録)による版 (1版 をインポートしました)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先:案内検索

ISO 8601日付時刻の表記に関する国際規格。最新版は2004年に発行されたISO 8601:2004 で、古い版としてISO 8601:2000 、ISO 8601:1988 があった。いずれも正式な題は Data elements and interchange formats – Information interchange – Representation of dates and times である。

ISO 8601の改定版として、ISO/DIS 8601:2016が提案されており、2018年に正式規格となる予定である。新規格はISO 8601-1(基本)[1]とISO 8601-2(拡張)[2]との2分冊となる。

基本形式と拡張形式

ISO 8601形式の時刻表記例[3]
基本形式 20240329T093520+0900
拡張形式 2024-03-29T09:35:20+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日とすることで規定されている[4]

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

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

日付

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

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

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

  • 0000年より前または9999年より後の年を表記する場合には、事前に通信の送信側と受信側との間での合意が必要である[7]。例えば、先頭に正負の符号(+あるいは-)を付して任意の桁数の数字を追加することができるという合意などである(任意の桁数の追加であるため年の桁数は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週の日として扱う。
    • 12月29日が月曜日の場合。
    • 12月30日が月曜日または火曜日の場合。
    • 12月31日が月曜日・火曜日・水曜日のいずれかの場合。

時刻

時刻の表記には 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などは許されない)[8]

標準では、継続時間は、次のセクションで説明する時間の期間の一部として記述されているものの、継続時間のフォーマットは、Java 8のDurationクラスなど[9][10]、時間の期間とは独立したものとして広く使用されている。

期間

特定の期間を表す場合、開始日時/終了日時で表記される。それぞれの日時は上述の日付あるいはそれに付属した時刻によって表記され、その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」、あるいはメタ文字「N」で表される。慶応など明治以前の元号についての規定はない。

日付は、基本形式「YY.MM.DD」または拡張形式「NYY.MM.DD」で表される(元号での年も「YY」である)。年月日のセパレータはハイフンではなくピリオドで、基本形式でも省略されない。

  • 例:
    • H16.04.01
    • 平16.04.01

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

台湾 (CNS 7648)

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

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

脚注

  1. Data elements and interchange formats — Information interchange - Representation of dates and times — Part 1: Basic rules 2016-10-26
  2. Data elements and interchange formats — Information interchange - Representation of dates and times — Part 2: Extensions 2016-10-26
  3. 日本標準時によるページ生成時刻
  4. [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
  5. [2] 3.2.2 The week calendar、The reference point of the time scale assigns Saturday to 1 January 2000.、p.15
  6. [3] p.20、Values in the range [0000] through [1582] shall only be used by mutual agreement of the partners in information interchange.
  7. [4] 3.5 Expansion p.19
  8. ISO 8601:2004 section 4.4.3.3 Alternative format
  9. Java 8 Class Duration”. Java Platform Standard Edition 8. Oracle. . 7 October 2017閲覧.
  10. Amazon Alexa Duration”. Amazon Developer. Amazon.com. . 7 October 2017閲覧.

関連項目

外部リンク

資料

言語はすべて英語表記

実装