[1] [DFN[[CODE(XML)[[VAR[xs:]]dateTime]]]] は [[XML Schema]]
で定義されている[[日付]]と[[時刻]]を表す[[データ型]]・[[書式]]です。

* 仕様書

[REFS[
- [17] [CITE@EN[W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes]] ([TIME[2012-04-04 21:34:51 +09:00]] 版) <http://www.w3.org/TR/xmlschema11-2/#dateTime>
]REFS]

* 値空間

[18] [[date/timeSevenPropertyModel]] のうち、[[·timezoneOffset·]] のみが省略可能です [SRC[>>17]]。

[23] [[日の数]]の制約も課されています [SRC[>>17]]。

* 字句空間

[24] 次のような[[文字列]]が[[字句空間]]に含まれます [SRC[>>17]]。
[FIG[
= [25] 省略可能: [CODE[[[-]]]]
= [26] [[ASCII数字]]4桁以上 ([[年]]): 4桁に満たない場合を除き、[[先導0]]禁止
= [27] [CODE[[[-]]]]
= [28] [[ASCII数字]]2桁 ([[月]]): 01~12
= [29] [CODE[[[-]]]]
= [30] [[ASCII数字]]2桁 ([[日]]): 01~[[日の数]]
= [31] [CODE[[[T]]]]
= [32] [[ASCII数字]]2桁 ([[時]]): 00~24
= [33] [CODE[[[:]]]]
= [34] [[ASCII数字]]2桁 ([[分]]): 00~59
= [35] [CODE[[[:]]]]
= [36] [[ASCII数字]]2桁 ([[秒]]): 00~59
= [37] 省略可能: [CODE[[[.]]]] の後 [[ASCII数字]]1桁以上
= [38] 省略可能: 次のいずれか ([[時差]])
=- [39] [CODE[[[Z]]]]
=- [40] 次の列
=-= [41] [CODE[[[+]]]] または [CODE[[[-]]]]
=-= [42] [[ASCII数字]]2桁 ([[時]]): 00~14
=-= [43] [CODE[[[:]]]]
=-= [44] [[ASCII数字]]2桁 ([[分]]): 00~59
]FIG]

[45] ただし、 >>32 が 24 のときは、 >>34、>>36、>>37 は 0 でなければいけません [SRC[>>17]]。

[46] ただし、 >>42 が 14 のときは、 >>44 は 0 でなければいけません [SRC[>>17]]。

* 暦法

[SEE[ [[XML Schema暦]] ]]

* 文脈

[2] [CODE[swe:timeIso8601]] で使われています。

[19] [[e-Statの日時形式]]の1つとして使われています。

* IETF の変種

[8] [[IETF]] などのいくつかの[[仕様書]]は、 [[RFC 3339の日付形式]]と [CODE(XML)@en[[[xs:dateTime]]]]
の両方の要件を満たすことを求めています。

;; [[IETFのXML日付形式]]を参照。

* XRD の変種

[REFS[
- [3] [CITE[Extensible Resource Descriptor (XRD) Version 1.0]] ([TIME[2010-11-01 20:25:40 +09:00]] 版) <http://docs.oasis-open.org/xri/xrd/v1.0/xrd-1.0.html#types.time>
- [5] [CITE[Extensible Resource Descriptor (XRD) Version 1.0]] ([TIME[2010-11-01 20:25:40 +09:00]] 版) <http://docs.oasis-open.org/xri/xrd/v1.0/xrd-1.0.html#element.expires>
]REFS]

[4] >>3 は [CODE(XML)@en[[[xs:dateTime]]]] に、[[時間帯]] [CODE[[[Z]]]]
でなければならないとの制約を課しています。 ([[時間帯]]の省略は認められないとも解釈できます。)

[11] >>5 ではそれに加えて[[秒]]の[[小数部]]も禁止しています。

* GPX の変種

[13] [[GPX]] の拡張の [CODE(XMLe)@en[time][time (GPX)]] [[要素]]の[[データ型]]
[DFN[[CODE[utcDateTimeType]]]] は、 [CODE[xs:dateTime]] に、
末尾が [CODE[Z]] でなければならないとの制約を加えています [SRC[>>12]]。

[REFS[
- [12] ([TIME[2014-08-07 02:03:22 +09:00]] 版) <http://www.topografix.com/GPX/gpx_modified/0/1/gpx_modified.xsd>
]REFS]

-*-*-

[21] [[GPX の[CODE[time]] 要素][time (GPX)]]では元の [CODE[xs:dateTime]]
が使われています。

[22] 
[[GPX]] の実装の1つ、 [[Suunto]] [[Androidアプリ]]の [[GPX]]
から経路データをインポートする機能は、
[[秒の小数部]]が9桁[[以下]]なら正常に読み込めますが、
10桁[[以上]]あると [[GPX]] のインポート処理全体を失敗させます。
[TIME[2021-03-12T06:56:00.000Z]]

[61] 9桁というのは [[ns]] 単位ってことでしょうね。

[60] [[XML Schema]] は構文上[[秒の小数部]]の桁数に制約を設けておらず、
そのような挙動を認めていません。
あるいは[[ハードウェア制限条項]]を根拠にすることもできるかもしれませんが、
失敗として扱う挙動が[[利用者]]に親切とは言えません。
[[秒の小数部]]のように精度がそこまで重要とは思われない情報なら、
読み込める精度で丸めて読み込み出来た方が便利です。


* CAP の変種

[53] [[XML Schema 1.0]] 第2版 [CODE[xs:dateTime]] を参照しつつ、[[XML Schema]] 内の[[正規表現]]および本文の[[規定]]により、
次のように制約しています。

- [54] [[年]]は [CODE[0000]] - [CODE[9999]] のみ
- [57] [[秒の小数部]]は使用しない
- [55] [[時間帯]]は必須であり、[[数値]]による指定のみ
- [56] [[UTC]] は [CODE[-00:00]] と記述する

;; [CODE[-00:00]] も参照。

[REFS[
- [52] [CITE@EN-US[Common Alerting Protocol]] ([TIME[2010-07-02 01:02:47 +09:00]]) <http://docs.oasis-open.org/emergency/cap/v1.2/CAP-v1.2-os.html>
]REFS]

* IIIF の変種

[FIG(quote)[
[FIGCAPTION[
[58] [CITE@en[Presentation API 2.1.1 — IIIF | International Image Interoperability Framework]]
([TIME[2017-09-15 08:03:41 +09:00]])
<http://iiif.io/api/presentation/2.1/#navdate>
]FIGCAPTION]

> The value must be an xsd:dateTime literal in UTC, expressed in the form “YYYY-MM-DDThh:mm:ssZ”. If the exact time is not known, then “00:00:00” should be used. Similarly, the month or day should be 01 if not known. 

]FIG]

* 関連

[9] [[W3C-DTF]]、[[RFC 3339の日付形式]]や[[HTMLの日付形式]]
([[大域日時文字列]]または[[地方日時文字列]]) と似ていますが、細部が異なります。

[47] [[派生型]]として [CODE[[[xs:dateTimeStamp]]]] があり、そちらは[[時差]]が必須です。

[48] [[ISO 8601の日付形式]>>25]に、類似形式との比較があります。

* メモ

[6] [CITE@en[XQuery 1.0 and XPath 2.0 Data Model (XDM) (Second Edition)]]
( ([TIME[2010-12-17 00:06:35 +09:00]] 版))
<http://www.w3.org/TR/2010/REC-xpath-datamodel-20101214/#dates-and-times>

[7] [CITE@EN[W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes]]
( ([TIME[2012-04-05 06:34:51 +09:00]] 版))
<http://www.w3.org/TR/2012/REC-xmlschema11-2-20120405/#dateTime>

[10] [[OpenDocument]] は [[XML Schema]] [[データ型]]で定義された[[日付形式]]を用いています。

[16] [CITE@EN[XQuery 1.0 and XPath 2.0 Functions and Operators (Second Edition)]]
( ([TIME[2010-12-17 00:06:54 +09:00]] 版))
<http://www.w3.org/TR/2010/REC-xpath-functions-20101214/#durations-dates-times>

[FIG(quote)[
[FIGCAPTION[
[14] [CITE@ja[xs:dateTime 型、xs:date 型、および xs:time 型のストレージ形式の変更]]
( ([TIME[2017-01-16 17:59:03 +09:00]]))
<https://msdn.microsoft.com/ja-jp/library/ee240708(v=sql.120).aspx>
]FIGCAPTION]

> SQL Server 2014 では、xs:dateTime、xs:date、xs:time の各型のストレージ形式が変更されており、タイム ゾーン情報を含む値と含まない値がサポートされ、タイム ゾーンが保持されるようになりました。

]FIG]


[FIG(quote)[
[FIGCAPTION[
[15] [CITE@en[Web Annotation Data Model]]
([TIME[2017-02-24 02:14:26 +09:00]])
<https://w3c.github.io/web-annotation/model/wd2/#h-lifecycle-information>
]FIGCAPTION]

> The datetime must be a xsd:dateTime with the UTC timezone expressed as "Z".

]FIG]


[FIG(quote)[
[FIGCAPTION[
[49] [CITE@en[Selectors and States]]
([TIME[2017-02-24 02:14:26 +09:00]])
<https://w3c.github.io/web-annotation/selector-note/#h-timestate_def>
]FIGCAPTION]

> The timestamp must be expressed in the xsd:dateTime format, and must use the UTC timezone expressed as "Z". If sourceDate is provided, then sourceDateStart and sourceDateEnd must not be provided.

]FIG]


[50] [CITE@en[XQuery and XPath Data Model 3.1]]
([TIME[2017-03-20 07:26:25 +09:00]])
<https://www.w3.org/TR/2017/REC-xpath-datamodel-31-20170321/#dates-and-times>

[51] [CITE@EN[XPath and XQuery Functions and Operators 3.1]]
([TIME[2017-03-21 16:02:06 +09:00]])
<https://www.w3.org/TR/2017/REC-xpath-functions-31-20170321/#date-time-types>



[59] [CITE@en[Time Ontology in OWL]]
([TIME[2017-10-16 14:39:32 +09:00]])
<https://w3c.github.io/sdw/time/#x3-3-time-position>

[20] [CITE@en[Decentralized Identifiers (DIDs) v1.0]]
([TIME[2020-12-27T18:27:35.000Z]], [TIME[2020-12-29T05:34:26.940Z]])
<https://w3c.github.io/did-core/#created>

[62] 
[CITE@en[rfc4153]], [TIME[2021-07-14T03:57:38.000Z]] <https://datatracker.ietf.org/doc/html/rfc4153#section-6.10>

[63] 
[[RFC 4153]] の [CODE[ValidPeriod]]
[[要素]]は[[期間]]を表し、
[CODE[start]] 属性と [CODE[end]] 属性の値が
[[XML Schemaデータ型]] [CODE[xs:dateTime]]
と定義されています (それ以外の[[規定]]なし)。
しかし示されている実例は

>
[PRE(XML code)[
        <ValidPeriod start="2002-04-01" end="2003-03-31"/>
]PRE]

... だけで、これは [CODE[xs:dateTime]] に[[適合]]しません。