[1]
俗に [DFN@en[[[W3C-DTF]]]] と呼ばれる[[日付形式]]は、
[TIME[1997年9月][1997-09]]に [[W3C]] の[[会員]]企業である [[Reuters Limited]]
が [[W3C]] に[[提出]]した [[ISO 8601の日付形式]]の[[プロファイル]]です。

[FIG(important)[
[8] 「W3C-DTF」と呼ばれている[[日時形式]]は、実際には [[W3C]] が制定したものではありません
(>>33)。
]FIG]

[3]
[[ISO 8601]] は、様々な[[応用]]を考慮して、
割と自由な[[日付]]と[[時刻]]の表現形式を規定しています。
この[[プロファイル]]では、それを [[Web]] 
で使うにあたって無駄な自由度をなくしており、機械処理が比較的
[WEAK[(あくまで比較的、元の [[ISO 8601]] と比べれば。)]]
容易になっています。

[4]
必要な[[精度]] ([[日]]まで、[[秒]]までなど) 
で6種類の書式が定義されています。

* 代替

[27] 既に [[W3C-DTF]] を用いることと決められている場合を除き、
[[日時]]を [[W3C-DTF]] によって表現するべきではありません。

[31] [[W3C-DTF]] の[[仕様書]]は、手続き上は[[廃止]]されていません
[WEAK[([[W3C Note]] なので「現行」も「[[廃止]]」も無いのかも?)]]。
しかし、現代の基準では[[標準]]規格として十分な品質を有しておらず、
十数年間誰にもメンテナンスされず放置されており、
[[XML Schema]] や [[HTML5]] をはじめとした新しい世代の[[仕様]]からも参照されていません。
従って、実質的には失効しているとみなすべきでしょう。

[28] [[HTML]] その他 [[Web]] 上では、一般に 
'''[[HTMLの日時形式]]'''のいずれかを用いるのが便利と思われます。
[SEE[ [[HTMLの日時形式]] ]]

[29] [[XML]] では、 '''[CODE(XML)@en[xs:dateTime]]''' を用いるのが良さそうです。
[[W3C-DTF]] に関する [[W3Cスタッフ]]コメントからも、それが当時の [[W3C]]
の意向であることがうかがえます (>>10)。

* 仕様書

[REFS[
- [5] [CITE@en[Date and Time Formats]] ([[W3C]] [[会員提出物]])
<http://www.w3.org/TR/1998/NOTE-datetime-19980827>
-- [CITE@en[Submission request to the World Wide Web Consortium]] 
<http://www.w3.org/Submission/1997/14/>
-- [CITE@en[Status for Date and Time Formats]] 
<http://www.w3.org/1998/.status/NOTE-datetime-19980827/status>
-- [CITE@en[Comment on Date and Time Formats Submission]] 
([[W3C]] [[スタッフ]]注釈)
<http://www.w3.org/Submission/1997/14/Comment>
- [25] [CITE[RDF Site Summary 1.0 Modules: Dublin Core]] ([TIME[2002-07-02 20:19:41 +09:00]] 版) <http://web.resource.org/rss/1.0/modules/dc/>
- [22] [CITE[The Atom Syndication Format 0.3 (PRE-DRAFT)]] ([TIME[2006-12-22 17:03:44 +09:00]] 版) <http://www.mnot.net/drafts/draft-nottingham-atom-format-02.html#rfc.section.3.3>
- [20] [CITE@en[SMIL 3.0 Timing and Synchronization]] ([TIME[2008-12-02 00:45:09 +09:00]] 版) <http://www.w3.org/TR/2008/REC-SMIL3-20081201/smil-timing.html#q31>
]REFS]

[33] [[W3C]] の [[Webサイト]]で公開されていますが、
[[W3C]] [[会員]]企業が [[W3C]] に[[提出]]したことを表すだけであり、
[[W3C]] の正式な規格ではありません。
当時の [[W3C]] の制度では [[W3C Note]] となっていますが、
現在の制度下であれば [[Member Submission]] と呼んで区別されているものです。
[SEE[ [[W3C Note]] ]]

;; [70] 
[[W3C-DTF]] のように [[W3C Note]] が [[W3C]] の[[規格]]と誤認された事案の反省から
[[Member Submission]] 制度が創設されたと思われますが、
過去に遡って整理していないため誤解が現在までずっと続いているのです。


* 暦法

[30] 
明示されていませんが、 [[ISO 8601のプロファイル]]であることから
[[ISO 8601]] の規定に従い[[先発グレゴリオ暦]]を採用しています。

[71] 
構文上の制約から、表現可能な範囲はそこから更に狭まっています。

[72] 
[[日本の元号]]や[[タイの仏暦]]や[[中華民国の民国紀元][民国紀元]]には対応していません。

[74] 
[[イスラム暦]]や[[東アジアの旧暦][支那式太陰太陽暦]]には対応していません。



* 構文

[40] 利用する場面によって粒度が異なるとして幾つかの構文が定義されており、
どれを採用するか利用するプロトコルの側で選択することになっています [SRC[>>5]]。

[41] 次の6種類の構文が示されています [SRC[>>5]]。

[FIG(list)[
- [42] [CODE[[VAR[YYYY]]
- [43] [CODE[[VAR[YYYY]]-[VAR[MM]]]]
- [44] [CODE[[VAR[YYYY]]-[VAR[MM]]-[VAR[DD]]]]
- [45] [CODE[[VAR[YYYY]]-[VAR[MM]]-[VAR[DD]]T[VAR[hh]]:[VAR[mm]][VAR[TZD]]]]
- [46] [CODE[[VAR[YYYY]]-[VAR[MM]]-[VAR[DD]]T[VAR[hh]]:[VAR[mm]]:[VAR[ss]][VAR[TZD]]]]
- [47] [CODE[[VAR[YYYY]]-[VAR[MM]]-[VAR[DD]]T[VAR[hh]]:[VAR[mm]]:[VAR[ss]].[VAR[s]][VAR[TZD]]]]
]FIG]

[48] ここで、各要素は次のような値です [SRC[>>5]]。

[FIG(list)[
- [VAR[YYYY]] = [[年]] (4桁[[数字]])
- [VAR[MM]] = [[月]] (2桁[[数字]]、 [CODE[01]] が[[1月]])
- [VAR[DD]] = [[日]] (2桁[[数字]]、 [CODE[00]] - [CODE[31]])
- [VAR[hh]] = [[時]] (2桁[[数字]]、 [CODE[00]] - [CODE[23]])
- [VAR[mm]] = [[分]] (2桁[[数字]]、 [CODE[00]] - [CODE[59]])
- [VAR[ss]] = [[秒]] (2桁[[数字]]、 [CODE[00]] - [CODE[59]])
- [VAR[s]] = [[秒の小数部]] (1桁[[以上]]の[[数字]]、採用する仕様の側で最小桁数と最大桁数
([[∞]]可) を設定可能)
- [VAR[TZD]] = [[時間帯]]
-- [CODE[Z]] = [[UTC]]
-- [[時差]]
--- [CODE[+[VAR[hh]]:[VAR[mm]]]] = [[UTC]] より進んでいる
--- [CODE[-[VAR[hh]]:[VAR[mm]]]] = [[UTC]] より遅れている
-- 採用する仕様の側で一方または両方を認めるべき
]FIG]

[50] 各要素の詳細な意味については、 [[ISO 8601]] に委ねているためか、
特に記述がありません。 [[ISO 8601]] が採用する仕様の側に決定を委ねている[[グレゴリオ改暦]]以前の[[年]]の解釈などは、
[[W3C-DTF]] でどう処理するべきかはっきりしません。
[[年]] [CODE[0000]] も禁止 (も許可も) されていません。

[49] [CODE[T]] や [CODE[Z]] の[[大文字]]と[[小文字]]について明記されていませんが、
特に規定がないことから[[大文字]]でなければならないと解釈するのが一般的です。

;; [73] [[RFC 3339の日時形式]]のように[[小文字]]を認める
[[ISO 8601のプロファイル]]もあるので注意。

* 閏秒

[18] この[[日付形式]]は[[閏秒]]に対応していません。

* 解釈

[51] [[W3C-DTF]] であると期待される文字列をどう解釈するべきかについては、
まったく規定がありません。

[EG[
[52] 例えば [CODE[2015-02-31]] のような存在しない[[日付]]を与えられた時、
どう解釈するべきかは不明です。
]EG]

* 文脈

[12]
古い [[HTML]] 仕様である [[HTML4]] は[[引用規格]]としてこの仕様を参照していますが、
それを引いている [CODE(SGML)@en[%Datetime;]]
型の定義では[[秒]]までの書式と同じものが (参照ではなく)
陽に定義されています。
[SEE[ 当時の規定の詳細は [CODE[%Datetime;]] を、現在の規定は [[HTMLの日時形式]]を参照 ]]

[13]
[[DCMI]] [[メタデータ]]で定義されている語
[CODE@en[[[date]]]] は、この仕様の[[日]]までの書式を推奨しています。
語 [CODE@en[[[W3CDTF]]]] はこの仕様の書式を表すとされています。
(が、どの書式なのか、あるいは全部なのかは、よくわかりません。)

[24] [[RSS 1.0]] でよく用いられる [CODE(XMLe)@en[[[dc:date]]]] [[要素]]の値は [[W3C-DTF]]
とされています [SRC[>>25]]。
どの形式なのか、すべてなのかは明記されていませんが、一般的には、また仕様暑中の例示では、
[[時間帯]]まで含まれた形式が使われています。

[57] その他 [[RDF語彙][語彙 (RDF)]]が採用していることがあります。


[61] 
[[RKMSの日時形式]]は
[[W3C-DTF]]
でした。

* Date construct (Atom 0.3)

[15] かつて用いられていた [[Atom 0.3]] では、 [DFN[[[Date construct]]]] [SRC[>>22]]
は[[内容]]が「[[W3C]] Date-Time string」である[[要素]]とされていました。

** 内容

[16] [[要素]]によっては、[[時間帯]]が示されている[['''べき''']]、
示されるなら [[UTC]] でなければ[['''ならない''']]といった制約が更に課されています。

** 関連

[17] [[Atom 0.3]] の改訂版に当たる [[Atom 1.0]] は [[Date construct]] に [[RFC 3339の日付形式]]と [[XML Schemaの日付形式]]を採用しています。
[SEE[ [[XML Schemaの日付形式]] ]]

*SMIL の日付形式

[19] [[SMIL]] はいくつかの[[日時]]や[[時間]]の表現方法を定義しています
[SRC[>>20]] が、
[[日時]]や[[日付]]や[[時刻]]に関しては、 [[W3C-DTF]] に[RUBYB[基づいている]@en[based upon]]とされています。
[[W3C-DTF]] で定義されている書式の1つである[[日付]] + [[時刻]] ([[秒の小数部]]まで表現可能) + [[時間帯]]の完全形のほかにも、
[[日付]]や[[時刻]]や[[時間帯]]を省略した書式も定義されています。

;; [26] [[W3C-DTF]] は [[Informative References]] の1つとして挙げられているに過ぎず、
それに「基づいた」構文を [[SMIL]] 側で独自に規定しています。

[21] [[閏秒]]に対応していないのも同じです。

* timestamp (Amazon Ion)

[62] [CITE@en[Specification]], [TIME[2021-09-20T16:55:41.000Z]], [TIME[2021-09-21T06:37:23.106Z]] <https://amzn.github.io/ion-docs/docs/spec.html#timestamp>

[63] 基本は[[W3C-DTF]]。
[[秒の小数部]]の桁数は [1, ∞)。
[[時差]]は [CODE[Z]], [[時差]]時分のどちらも可で
[CODE[-00:00]] ([[unknown local offset]]) も使用可能。

[65] 
年のみ、年月のみ、年月日のみは [[UTC]] の [[unknown local offset]]
と解される。

;; [66] [[UTC]] + [[unknown local offset]] とは [CODE[-00:00]]
と同じ解釈のことらしい。
([[unknown local offset]] という意味付きとはいえ、
年月日が[[UTC]] と解釈されるのは使いにくそうだが...)

[64] 年のみ、年月のみのとき直後に [CODE[T]] が必須。
年月日の時直後に [CODE[T]] を付けても良い (なくても良い)。

[67] 
[[等価性][日付の比較]]
(equivalent):
同じ瞬間、精度、時差なら等しい。


[68] [CITE@en[Ion Binary Encoding]], [TIME[2021-09-20T16:55:41.000Z]], [TIME[2021-09-21T06:49:20.059Z]] <https://amzn.github.io/ion-docs/docs/binary.html#6-timestamp>

[69] バイナリー形式はテキスト形式と違って[[バイナリー]]データ。
[[UTC]] での日時部品 (年から[[秒の小数部]]まで、年のみ必須) + 時差の分数で表す。
([[W3C-DTF]] と違って日時部品は [[UTC]] の値なので、
テキストとバイナリーの変換時に書き換えが生じる。
その結果値域が微妙に違う。
[CODE[-00:00]] も表現できない。)

* 関連

[9]
'''ISO 8601 との関係''':
この仕様で規定されている書式は、 [[ISO 8601]]:1988 
に基づく[[プロファイル]]です。しかし、 [[ISO 8601]]:2003
から見ると古い書式になっています。

[10]
'''XML Schema との関係''':
[[XML Schema]] では、 [CODE(XML)@en[[[dateTime]]]] や
[CODE(XML)@en[[[gYear]]]]
などこの仕様で規定されている書式に相当する[[データ型]]が定義されています。

この仕様についての [[W3C]] [[スタッフ]]の注釈
([[XML Schema]] [[勧告]]後のもの) によれば、
この仕様は既に参照している他の仕様があるのでそのまま残してあるそうですが、
今後は [[XML Schema]] の[[データ型]]を参照するべきなのでしょう。

[11]
'''RFC 3339 との関係''':
[[秒]]までの書式は、 [[RFC 3339の日付形式]]とほぼ同じです。

[34] [[EDTF]] は [[W3C-DTF]] とも互換性があると主張しています。

[56] 
[[ODRF]] は [[W3C-DTF]] を基にしていると謳っています。
ただし [[ODRF]] が使っているのは [[W3C-DTF]] の一部だけです。


* 例

- [2] [CODE(example)[2003-01-02]]

* 歴史

[39] [CODE[draft-newman-datetime]] を参考にした [SRC[>>5]] とされています。
[CODE[draft-newman-datetime]] は後の [[RFC 3339]] です。

[58] かつては
<http://www.w3.org/TR/1998/NOTE-datetime> 
でもアクセスできたようですが、現在では [CODE[404]] です。
[TIME[2019-06-11T00:44:05.000Z]]

* メモ

[6]
W3C-DTF は人間が読む文章でも使うべきものだと誤解してる連中が少なからずいると見える。
[[ISO 8691]] も W3C-DTF も [[RFC 3339]] も、機械処理用の記述形式でしかないのに。
(確かに W3C-DTF Note にはそんなこと一言も書いてない。自明だから書かなかったのかな。)

人間が読むための形式は言語や地域や主義主張や個人の趣味で色々で、それを統一しようとするのは愚かなこと。
[[W3C]] がそんなことするわけないじゃん。
([[名無しさん]] [WEAK[2004-09-04 02:52:38 +00:00]])

[7]
というかよく読めば単なる Member Submission で、 W3C が規定したわけでもなんでもないのに、誰が [Q[W3C-DTF]] なんて言い出したのでしょうね?

ちなみに W3C スタッフのコメントは
[CITE[Comment on Date and Time Formats Submission]] <http://www.w3.org/Submission/1997/14/Comment>

最近になって W3C は WG からの公式な W3C 文書と Member/Team Submission を区別するようになりましたけど、時既に遅すぎといいますか、なんと申し上げますか。
([[名無しさん]])

[14]
>>6 [[W3C-DTF]]は人間にも読みやすくていいとか主張している人がいますけど、明らかに不自然な[Q@en[T]]が入る書式のどこがよいのでしょうかねぇ。

[23] [CITE@en[OpenID Authentication 1.1]]
( ([TIME[2007-10-08 22:03:49 +09:00]] 版))
<http://openid.net/specs/openid-authentication-1_1.html#anchor33>

[FIG(quote)[
[FIGCAPTION[
[32] ([TIME[2016-03-25 14:44:38 +09:00]] 版)
<http://iss.ndl.go.jp/rss/ndlopac/index.xml>
]FIGCAPTION]

> <dcterms:issued xsi:type="dcterms:W3CDTF">2016</dcterms:issued>

]FIG]

[FIG(amazon)[
Web技術
]FIG]

[FIG(quote)[
[FIGCAPTION[
[35] [CITE@ja[Echo【bitFlyer】]]
([TIME[2017-05-10 18:44:42 +09:00]])
<https://bitflyer.jp/ja/corporate/echo/api>
]FIGCAPTION]

> リクエスト時のパラメータや、レスポンスデータ内において、日時を表現するために ISO 8601(W3C-DTF)形式(※2)の文字列を用います。タイムゾーンは JST で固定。フォーマットは“yyyy-mm-dd hh:mm:ss”。

]FIG]

[38] [[W3C-DTF]] には >>35 のような[[時間帯]]の指定を省略した形式は定義されていないのですが...

[FIG(quote)[
[FIGCAPTION[
[36] [CITE[Top-level Element: <originInfo> (MODS Ver. 3 User Guidelines: Metadata Object Description Schema, Library of Congress)]]
([TIME[2013-08-15 04:37:12 +09:00]])
<https://www.loc.gov/standards/mods/userguide/origininfo.html>
]FIGCAPTION]

> Use of the encoding attribute is recommended. If an exact year is known, the DLF/Aquifer guidelines recommend representing the value using the W3CDTF encoding, which also allows month and day to be specified if known. The W3CDTF encoding is a profile of the more flexible ISO 8601 standard. Using W3CDTF ensures a more predictable format for dates. The DLF/Aquifer guidelines recommend using ISO 8601 encoding only when a date cannot be expressed using W3CDTF.

]FIG]


[FIG(quote)[
[FIGCAPTION[
[37] [CITE[Top-level Elements and Attributes (MODS Ver. 3 User Guidelines: Metadata Object Description Schema, Library of Congress)]]
([TIME[2016-07-22 06:48:40 +09:00]])
<https://www.loc.gov/standards/mods/userguide/generalapp.html>
]FIGCAPTION]

> w3cdtf – This value identifies dates following the W3C profile of ISO 8601, Date and Time Formats, that specifies the extended format for dates using the pattern: YYYY-MM-DD. If hours, minutes, and seconds are also needed the following pattern is used: YYYY-MM-DDThh:mm:ss.

]FIG]


[FIG(quote)[
[FIGCAPTION[
[53] [CITE[XLIFF Version 2.0]]
([TIME[2014-08-06 01:00:00 +09:00]])
<http://docs.oasis-open.org/xliff/xliff-core/v2.0/os/xliff-core-v2.0-os.html#ctr_datetime>
]FIGCAPTION]

> Value description: Date in one of the formats defined in '''['''NOTE-datetime''']'''.

>          <ctr:revision author="system" datetime="2013-05-15T10:00:00+8:00"

]FIG]

[54] >>53 の例示の[[日時]]は [[W3C-DTF]] のいずれとも違う気がしますが...
[[XML Schema]] の定義がありますが、なぜか [CODE[xs:dateTime]] は使っていません。

[FIG(quote)[
[FIGCAPTION[
[55] [CITE@ja[SVF PDF Archiver Web APIリファレンス]]
([TIME[2017-05-18 00:51:38 +09:00]])
<https://manual.wingarc-support.com/manual/svf/spa93apiref/?pageId=p55980886>
]FIGCAPTION]

> ISO8601 RFC3339 W3CDTF(日付と時刻をTでつなげる)に準拠した文字列(例 "2016-11-22T11:18:43.933+0900")で出力します。

]FIG]


[60] [CITE@en[DCMI: DCMI Metadata Terms]], [TIME[2021-01-11T08:57:10.000Z]], [TIME[2021-01-13T09:19:08.270Z]] <https://www.dublincore.org/specifications/dublin-core/dcmi-terms/#http%3A%2F%2Fpurl.org%2Fdc%2Fterms%2FW3CDTF>
