-
Notifications
You must be signed in to change notification settings - Fork 4
/
458.txt
504 lines (372 loc) · 23.4 KB
/
458.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
[7] [[HTML]] ではいくつかの[[属性]]などで[[日時]]を表す文字列が用いられています。
そのほとんどは [[ISO 8601の日付形式]]に近いものですが、歴史的な理由により異なる書式を採用している文脈もあります。
[93] [[HTML]] で定義されている[[日付形式]]には、次のものがあります。
[FIG[
- [[時刻]] (>>20)
- [[月]] ([[月]]の項を参照)
- [[日付]] (>>16)
- [[地方日時]] (>>25)
- [[大域日時]] (>>31)
- [[月日]] ([[月日]]の項を参照)
- [[日付か時刻]]
- [[週]] ([[週]]の項を参照)
- [[時間帯]] (>>28)
- [CODE(DOMa)@en[[[lastModified]]]] ([CODE(DOMa)@en[[[lastModified]]]] の項を参照)
- [[時間]] ([[HTMLの時間形式]]の項を参照)
]FIG]
* 仕様書
[REFS[
- [8] <http://www.whatwg.org/specs/web-apps/current-work/#dates-and-times>
]REFS]
;; [51] 本項では [[HTML5]] の定義に基づき説明しますが、
構文の定義や算法の定義は必ずしも仕様書の通りではありません。仕様書の規定と等価な別な表現で説明していることがあります。
* 定義
[94] [[HTML]] は[[日付形式]]の定義のために、次のような概念も定義しています。
- [[先発グレゴリオ暦]]・[[先発グレゴリオ日]]
- [[日の数]]
* 時刻
[20] [DFN[[RUBYB[時刻]@en[time]]]]は、特定の[[時刻]]を表し、
[[時]]、[[分]]、[[秒]]、[[秒の小数部]]から成ります。[[時間帯]]の情報は持ちません。
[SRC@en[[[HTML5]]]]
** 構文定義
-[21] [CODE(ABNF)[[DFN[[RUBYB[妥当な時刻文字列]@en[valid time string]]]] := 2[[ASCII数字]] ":" 2[[ASCII数字]] [":" 2[[ASCII数字]] ["." 1*[[ASCII数字]] ] ] ]]
[SRC@en[[[HTML5]]]]
-- 1つ目の[[数字]]列は、[[時]]を表す 0〜23 の[[数]]
-- 2つ目の[[数字]]列は、[[分]]を表す 0〜59 の[[数]]
-- 3つ目の[[数字]]列は、[[秒]]の[[整数部]]を表す 0〜59 の[[数]] ([[秒]]が 0 の時だけ省略可能)
-- 4つ目の[[数字]]列は、[[秒]]の[[小数部]]を表す値 ([[秒]]が[[整数]]の時だけ省略可能)
** 最短形
[104] [[妥当な正規化済み地方日時文字列]]や[[妥当な正規化済みUTC大域日時文字列]]では、
[[妥当な時刻文字列]]の最短形を使うことになっています。これはすなわち、
- [105] [[秒]]の[[小数部]]は、小さい方の桁が 0 なら、それを省略します。
- [107] [[秒]]の[[小数部]]が0なら、 [CODE[[[.]]]] と[[小数部]]省略します。
- [106] [[秒]]が[[整数部]]も[[小数部]]も 0 なら、 [CODE[[[:]]]] と[[秒]]を省略します。
** 構文解析
[23] [DFN[[RUBYB[時刻文字列の構文解析]@en[parse a time string]]]]
[SRC@en[[[HTML5]]]]:
= [[時刻部品の構文解析]]を行い、それが何も返さなかったら、何も返さないで終える
= [[文字列]]がそれで終わっていなければ、何も返さないで終える
= (1) で得られた[[時]]と[[分]]と[[秒]]を返す
[24] [DFN[[RUBYB[時刻部品の構文解析][parse a time component]]]]
[SRC@en[[[HTML5]]]]:
= [[文字列]]が[[正規表現]] [CODE(regexp)[([[数字]]{2}):([[数字]]{2})(?::([[数字]]{2}(?:\.[[数字]]+)?))?]]
に[[一致]]しない場合、何も返さず終わる
= $1 を[[十進数]]として解釈したものを[[時]]とする
= $2 を[[十進数]]として解釈したものを[[分]]とする
= $3 を[[十進数]]として解釈したものを[[秒]]とする ($3 がない場合、 0 とする)
= [[時]]が 0〜23 でない場合、何も返さない
= [[分]]が 0〜59 でない場合、何も返さない
= [[秒]]が 60 [[未満]]の[[正数]]でない場合、何も返さない
= [[時]]と[[分]]と[[秒]]を返す
** 数値表現
[63] [CODE(DOMa)@en[[[valueAsNumber]]]] [[DOM属性]]では、
[[1970年1月1日]]の[[0時0分]] ([[UTC]]) からの[[ミリ秒]]の数によって表現されます。
[SRC@en[[[HTML5]]]]
[64] [CODE(DOMa)@en[[[valueAsDate]]]] [[DOM属性]]では、
[[1970年1月1日]]における[[時刻]] ([[UTC]]) とした [CODE(JS)@en[[[Date]]]] [[物体]]によって表現されます。
[SRC@en[[[HTML5]]]]
[65] [[時刻]]を入力する [CODE(HTMLe)@en[[[input]]]]
[[要素]]の [CODE(HTMLa)@en[[[step]]]] [[属性]]では、
[[時間]]が[[秒]]単位の[[数]]によって表現されます。
[SRC@en[[[HTML5]]]]
** 文脈
[54] [CODE(HTMLa)@en[[[type]]]] が [CODE(HTML)@en[[[time]]]] の [CODE(HTMLe)@en[[[input]]]]
[[要素]]で使われます。
* 日付
[16] [DFN[[RUBYB[日付]@en[date]]]]は、[[先発グレゴリオ暦]]上の[[日付]]を表します。
[[日付]]には[[年]]、[[月]]、[[日]]が含まれますが、[[時間帯]]は含まれません。
[SRC@en[[[HTML5]]]]
** 構文定義
-[17] [CODE(ABNF)@en[[DFN[[RUBYB[妥当な日付文字列]@en[valid date string]]]] := [[妥当な月文字列]] "-" 2[[数字]]]]
[SRC@en[[[HTML5]]]]
-- 最後の[[数字]]列は、[[年]]と[[月]]に基づく[[日]]の数 (>>9) [[以下]]の[[正数]]で、[[日]]を表す
** 構文解析
[18] [DFN[[RUBYB[日付文字列の構文解析]@en[parse a date string]]]]
[SRC@en[[[HTML5]]]]:
= [[日付部品の構文解析]]を行い、それが何も返さなかったら、何も返さないで終える
= [[文字列]]がそれで終わっていなければ、何も返さないで終える
= (1) で得られた[[年]]と[[月]]と[[日]]を返す
[19] [DFN[[RUBYB[日付部品の構文解析][parse a date component]]]]
[SRC@en[[[HTML5]]]]:
= [[月部品の構文解析]]により、[[年]]と[[月]]を得る。何も返されなかった場合、何も返さず終わる
= [[文字列]]の続きが[[正規表現]] [CODE(regexp)[-([[数字]]{2})]] に[[一致]]しない場合、何も返さず終わる
= $1 を[[十進数]]として解釈したものを[[日]]とする
= [[日]]が[[年]]と[[月]]に基づく[[日]]の数 (>>9) [[以下]]の[[正数]]でなければ、何も返さず終わる
= [[年]]と[[月]]と[[日]]を返す
** 数値表現
[70] [CODE(DOMa)@en[[[valueAsNumber]]]] [[DOM属性]]では、
[[1970年1月1日]]の[[0時0分]] ([[UTC]]) からその[[日]]の[[真夜中]]
([[UTC]]) までの[[ミリ秒]]の数によって表現されます。
[SRC@en[[[HTML5]]]]
[71] [CODE(DOMa)@en[[[valueAsDate]]]] [[DOM属性]]では、
その[[日]]の[[真夜中]] ([[UTC]]) を表す [CODE(JS)@en[[[Date]]]] [[物体]]によって表現されます。
[SRC@en[[[HTML5]]]]
[72] [[日付]]を入力する [CODE(HTMLe)@en[[[input]]]]
[[要素]]の [CODE(HTMLa)@en[[[step]]]] [[属性]]では、
[[時間]]が[[日]]単位の[[数]]によって表現されます。
[SRC@en[[[HTML5]]]]
** 文脈
[53] [CODE(HTMLa)@en[[[type]]]] が [CODE(HTML)@en[[[date]]]] の [CODE(HTMLe)@en[[[input]]]]
[[要素]]で使われます。
* 地方日時
[25] [DFN[[RUBYB[地方日時]@en[local date and time]]]]は、
[[先発グレゴリオ暦]]上の[[日時]]を表します。
[[年]]、[[月]]、[[日]]、[[時]]、[[分]]、[[秒]]、[[秒の小数部]]から成ります。
[[時間帯]]の情報は含みません。
[SRC@em[[[HTML5]]]]
** 構文定義
[26] [DFN[[RUBYB[[[妥当な地方日時文字列]]]@en[valid local date and time string]]は、次のような[[文字列]]です
[SRC[>>8]]。
[FIG[
= [97] [[妥当な日時文字列]]
= [98] [CODE[[[T]]]] か [CODE(char)[[[U+0020]]]]
= [99] [[妥当な時刻文字列]]
]FIG]
;; [100] 「T」は[[大文字]]でなければなりません。
;; [101] 元は >>98 は「T」だけでしたが、後に緩和されて [CODE(char)[[[U+0020]]]] も認められるようになりました。
[102] [DFN[[RUBYB[[[妥当な正規化済み地方日時文字列]]]@en[valid normalized local date and time string]]]]は、
>>26 のうち、 >>98 が [CODE[[[T]]]] であり、 >>99 が最短形のものです [SRC[>>8]]。
;; [103] [[秒]]未満は可能な限り短くしなければいけませんし、[[秒]]が0なら[[秒]]部分も省略します。
** 構文解析
[27] [DFN[[RUBYB[地方日時文字列の構文解析]@en[parse a local date and time string]]]]は、
次のように行います [SRC[>>8]]。
[FIG[
= [[日付部品の構文解析]]により、[[年]]と[[月]]と[[日]]を得る。何も返されなかった場合、
何も返さず終わる
= [[文字列]]の次の[[文字]]が[[大文字]]の「[CODE(char)[[[T]]]]」か [CODE(char)[[[U+0020]]]] でない場合、
何も返さず終わる
= [[時刻部品の構文解析]]により、[[時]]と[[分]]と[[秒]]を得る。何も返されなかった場合、
何も返さず終わる
= [[文字列]]がそれで終わっていなければ、何も返さず終わる
= [[年]]と[[月]]と[[日]]と[[時]]と[[分]]と[[秒]]を返す
]FIG]
** 数値表現
[73] [CODE(DOMa)@en[[[valueAsNumber]]]] [[DOM属性]]では、
[[1970年1月1日]]の[[0時0分]]からの[[ミリ秒]]の数によって表現されます。
[SRC@en[[[HTML5]]]]
[74] [CODE(DOMa)@en[[[valueAsDate]]]] [[DOM属性]]での表現は定義されていません。
[SRC@en[[[HTML5]]]]
[75] [[地方日時]]を入力する [CODE(HTMLe)@en[[[input]]]]
[[要素]]の [CODE(HTMLa)@en[[[step]]]] [[属性]]では、
[[時間]]が[[秒]]単位の[[数]]によって表現されます。
[SRC@en[[[HTML5]]]]
** 文脈
[55] [CODE(HTMLa)@en[[[type]]]] が [CODE(HTML)@en[[[datetime-local]]]] の [CODE(HTMLe)@en[[[input]]]]
[[要素]]で使われます。
* 時間帯
[28] [DFN[[RUBYB[[[時差]]]@en[time-zone offset]]]]は、[[時]]と[[分]]によって構成される[[符号]]つき[[数]]です
[SRC[>>8]]。
[108] [[大域日時]]や[[日付や時刻]]には[RUBYB[[[時間帯]]]@en[timezone]]の情報を含めることができます。
** 構文定義
[109] [DFN[[RUBYB[[[妥当な時差文字列]]]@en[valid time-zone offset string]]]]とは、
[FIG[
- [110] [[UTC]] を表す[[大文字]]の [DFN[[CODE[[[Z]]]]]]
]FIG]
... か、または
[FIG[
= [111] [[符号]] [CODE[[[+]]]] または [CODE[[[-]]]]
= [112] [[時]]を表す[[ASCII数字]]2桁
= [113] [CODE[[[:]]]]
= [114] [[分]]を表す[[ASCII数字]]2桁
]FIG]
... のいずれかの[[文字列]]です。ただしここで >>111、>>112、>>114 は[[時差]]の[[符号]]、
[[時]]、[[分]]をそれぞれ表しており、 >>112 は 0〜23、 >>114 は 0〜59 の範囲でなければなりません。
また、[[時差]]が0のときは、 >>111 は [CODE[[[-]]]] でなければなりません。 [SRC[>>8]]
** 構文解析
[29] [DFN[[RUBYB[時差文字列の構文解析]@en[parse a time-zone offset string]]]]や[DFN[[RUBYB[時差部品の構文解析]@en[parse a time-zone offset component]]]]
(旧・[DFN[[RUBYB[時間帯部品の構文解析]@en[parse a timezone component]]]])
は、次のような処理をいいます [SRC[>>8]]。
[FIG[
= 次の[[文字]]が[[大文字]]の「[CODE(char)[[[Z]]]]」 であれば、
[[時]]として 0、[[分]]として 0 を返して終わる
= [[文字列]]が[[正規表現]] [CODE(regexp)[([+-]2[[数字]]):(2[[数字]])]] に[[一致]]しない場合、
何も返さずに終わる
= $1 を[[十進数]]として解釈したものを[[時]]とする
= $2 を[[十進数]]として解釈したものを[[分]]とする
= [[時]]が -23〜23 でない場合、何も返さない
= [[分]]が 0〜59 でない場合、何も返さない
= [[時]]と[[分]]を返す
]FIG]
** 関連
[30] [[RFC 3339の日付形式]]などでは [[-00:00]] に[[時間帯]]不明という意味が与えられていますが、
[[HTML]] の[[日付形式]]では禁止されています。
* 大域日時
[31] [DFN[[RUBYB[大域日時]@en[global date and time]]]]は、
[[先発グレゴリオ暦]]上の[[日時]]を表します。
[[年]]、[[月]]、[[日]]、[[時]]、[[分]]、[[秒]]、[[秒の小数部]]、[[時間帯]]から成ります。
[SRC@em[[[HTML5]]]]
** 構文定義
[32] [DFN[[RUBYB[妥当な大域日時文字列]@en[valid global date and time string]]]]は、次のような[[文字列]]です
[SRC[>>8]]。
[FIG[
= [115] [[妥当な日時文字列]]
= [116] [CODE[[[T]]]] か [CODE(char)[[[U+0020]]]]
= [117] [[妥当な時刻文字列]]
= [118] [[妥当な時差文字列]]
]FIG]
;; [119] 「[CODE(char)[[[T]]]]」は[[大文字]]でなければなりません。
;; [120] 以前は >>116 は [CODE[[[T]]]] のみでしたが、緩和されました。
[121] [DFN[[RUBYB[[[妥当な正規化済みUTC強制大域日時文字列]]]@en[valid normalized forced-UTC global date and time string]]]]とは、
次のような[[文字列]]です [SRC[>>8]]。
[FIG[
= [122] [[妥当な日時文字列]] ([[UTC]] で表現したもの)
= [123] [CODE[[[T]]]]
= [124] [[妥当な時刻文字列]] ([[UTC]] で表現したもので、最短形)
= [125] [CODE[[[Z]]]]
]FIG]
** 構文解析
[33] [DFN[[RUBYB[大域日時文字列の構文解析]@en[parse a global date and time string]]]] [SRC@en[[[HTML5]]]]:
= [[日付部品の構文解析]]により、[[年]]と[[月]]と[[日]]を得る。何も返されなかった場合、
何も返さず終わる
= [[文字列]]の次の[[文字]]が[[大文字]]の「[CODE(char)[[[T]]]]」か [CODE[[[U+0020]]]] でない場合、
何も返さず終わる
= [[時刻部品の構文解析]]により、[[時]]と[[分]]と[[秒]]を得る。何も返されなかった場合、
何も返さず終わる
= [[時差部品の構文解析]]により、[[時間帯]]の[[時]]と[[分]]を得る。何も返されなかった場合、
何も返さず終わる
= [[文字列]]がそれで終わっていなければ、何も返さず終わる
= [[年]]~[[秒]]を、[[時間帯]]の情報を使って [[UTC]] に換算する
= [[年]]と[[月]]と[[日]]と[[時]]と[[分]]と[[秒]]と[[時間帯]]の[[時]]と[[分]]を返す
** 数値表現
[76] [CODE(DOMa)@en[[[valueAsNumber]]]] [[DOM属性]]では、
[[1970年1月1日]]の[[0時0分]] ([[UTC]]) からの[[ミリ秒]]の数によって表現されます。
[SRC@en[[[HTML5]]]]
[77] [CODE(DOMa)@en[[[valueAsDate]]]] [[DOM属性]]では、
[[UTC]] におけるその[[時刻]]を表す [CODE(JS)@en[[[Date]]]] [[物体]]によって表現されます。
[SRC@en[[[HTML5]]]]
[78] [[大域日時]]を入力する [CODE(HTMLe)@en[[[input]]]]
[[要素]]の [CODE(HTMLa)@en[[[step]]]] [[属性]]では、
[[時間]]が[[秒]]単位の[[数]]によって表現されます。
[SRC@en[[[HTML5]]]]
** 文脈
[56] [CODE(HTMLa)@en[[[type]]]] が [CODE(HTML)@en[[[datetime]]]] の [CODE(HTMLe)@en[[[input]]]]
[[要素]]で使われます。
[57] [CODE(HTMLe)@en[[[ins]]]] [[要素]]や [CODE(HTMLe)@en[[[del]]]] [[要素]]の
[CODE(HTMLa)@en[[[datetime]]]] [[属性]]で使われます。
** 例
[34] [CODE(HTML example)[0037-12-13T00:00Z]] [SRC@en[[[HTML5]]]]
[[ローマ皇帝]][[ネロ]]の[[誕生日]] ([[ユリウス暦]]37年12月15日の[[グレゴリオ暦]]換算)
の[[真夜中]]を表します。なお、
[CODE(HTML bad example)[[[37-12-13]]]] は[[年]]が4桁に満たないので、
[[妥当な大域日時文字列]]ではありません。
[35] [CODE(HTML example)[1979-10-14T12:00:00.001-04:00]] [SRC@en[[[HTML5]]]]
[[北米東海岸]]の[[夏時刻]]中の1979年10月14日の[[正午]]から1[[ミリ秒]]後を表します。
[36] [CODE(HTML example)[8592-01-01T02:09+02:09]] [SRC@en[[[HTML5]]]]
将来の[[時刻]]です。端数の[[時間帯]]は現在[[地球上]]では用いられていませんが、
仕様上は認められています。
* 日付か時刻
[47] [DFN[[RUBYB[日付か時刻の文字列]@en[date or time string]]]]は、
[[日付]]か[[時刻]]か[[大域日時]]のいずれかです。
[SRC@en[[[HTML5]]]]
** 構文定義
-[48] [CODE(ABNF)[[DFN[[RUBYB[妥当な日付か時刻の文字列]@en[valid date or time string]]]] := [[妥当な日付文字列]] / [[妥当な時刻文字列]] / [[妥当な大域日時文字列]]]]
-[49] [CODE(ABNF)[[DFN[[RUBYB[妥当な内容中の日付か時刻の文字列]@en[valid date or time string in content]]]] := *[[White_Space]] [[妥当な日付か時刻の文字列]] *[[White_Space]]]]
** 構文解析
[50] [DFN[[RUBYB[日付か時刻の文字列の構文解析][parse a date or time string]]]] [SRC@en[[[HTML5]]]]:
= 先頭と末尾から [[White_Space]] を除去する (「内容中」の場合のみ)
= [[大域日時文字列の構文解析]]が値を返すなら、それを返して終わる
= [[日付の構文解析]]が値を返すなら、それを返して終わる
= [[時刻の構文解析]]が値を返すなら、それを返して終わる
= 何も返さないで終わる
** 文脈
[59] [CODE(HTMLe)@en[[[time]]]] [[要素]]で使われます。
[CODE(HTMLa)@en[[[datetime]]]] [[属性]]では[[妥当な日付か時刻の文字列]]、
[[内容]]では[[妥当な内容中の日付か時刻の文字列]]の定義が用いられます。
* 暦法との関係
** 過去の日付
[12] [[HTML]] は[[グレゴリオ暦]] (だけ) を採用しています。[[グレゴリオ暦]]が採用される以前の[[日付]]も表すことができますが、
[[グレゴリオ暦]]を過去に延長した場合に相当する[[日付]]を使って表されます
([[先発グレゴリオ暦]] (proleptic グレゴリオ暦) などと呼ばれます)。
[39] [[年]]は[[正数]]のみを指定できます。0年や負の年は認められていません。
** 将来の日付
[37] 現在の版の [[HTML5]] では、[[年]]の桁数が4桁以上で無制限とされており、[[1万年問題]]は存在しません。
[38] 過去の版の [[HTML5]] 案や [[Web Forms 2.0]] や [[HTML4]] では[[年]]は4桁に制限されていました。
** 閏年
[95] [[HTMLの日付形式]]は[[先発グレゴリオ暦]]に従って[[閏年]]に対応しています。
[96] [[年]]を含んでいない[[妥当な月日文字列]]については、[[閏年]]同様2月29日 ([CODE[--02-29]])
が認められています。
** 閏秒
[22] [[HTML]] の[[日付形式]]は[[閏秒]]に対応していません。[[秒]]の部分に 60 や 61
を使うことは認められていません。
* 歴史
[46] [[HTML]] の[[日付形式]]は、 [[HTML 4.0]] で [CODE(HTMLa)@en[[[datetime]]]]
[[属性]]が導入されたことではじめて規定され、後に [[Web Forms 2.0]] と [[HTML5]]
により拡張され現在に至っています。
** [CODE(SGML)[%Datetime;]] 型 (HTML4/XHTML1)
[1] [[HTML 4]] の [DFN[[CODE(SGML)[%Datetime]]]] 型は、
[[W3C-DTF]] の2番目に長い (秒未満までは表現できない)
形式です。
[6] 仕様書:
- [[HTML 4]]
-- <IW:HTML4:"types.html#type-datetime">
-- [[厳密DTD]] <IW:HTML4:"sgml/dtd.html#Datetime">
-- [[移行用DTD]] <IW:HTML4:"sgml/loosedtd.html#Datetime">
-[[XHTML 1.0]]
-- [CSECTION[A.1.1. XHTML-1.0-Strict]]
<http://www.w3.org/TR/2002/REC-xhtml1-20020801/dtds.html#dtdentry_xhtml1-strict.dtd_Datetime>
-- [CSECTION[A.1.2. XHTML-1.0-Transitional]]
<http://www.w3.org/TR/2002/REC-xhtml1-20020801/dtds.html#dtdentry_xhtml1-transitional.dtd_Datetime>
-- [CSECTION[A.1.3. XHTML-1.0-Frameset]]
<http://www.w3.org/TR/2002/REC-xhtml1-20020801/dtds.html#dtdentry_xhtml1-frameset.dtd_Datetime>
- [[XHTML m12n]]
--[CSECTION[4.3. Attribute Types]]
<IW:XHTML1m12n:"abstraction.html#dt_Datetime">
[5]
:[[引数実体名]]:[CODE(SGML)[%Datetime]] ([[HTML 4]], [[XHTML 1.0]])
:抽象属性型名:[CODE[Datetime]] ([[XHTML m12n]])
:属性型名:[Q[datetime]] ([[HTML 4]])
:[[SGML]] [[属性型]]:[CODE(SGML)[[[CDATA]]]]
:[[XML]] [[属性型]]:[CODE(XML)[[[CDATA]]]]
:大文字・小文字:区別あり
[2] 大文字・小文字は区別されます。
[CODE(HTML)[T]] と [CODE(HTML)[Z]] が使われ得ますが、
いずれも大文字でなければなりません。
[3] 時・分・秒が得られない時は、 [CODE(HTML)[00]]
としてもよいことになっています。
閏秒の 60秒は W3C‐DTF では表現できません。
[4]
[CODE(HTMLe)[[[ins]]]] 要素や [CODE(HTMLe)[[[del]]]] 要素の [CODE(HTMLa)[[[datetime]]]] 属性が [CODE(SGML)[%Datetime]] 型です。
** HTML5 案
[40] 現在 [[HTML]] で定義されている[[日付形式]]のほとんどは、 [[Web Forms 2.0]]
で[[日時]]関係の[[フォーム制御子]]を実現するために導入されました。
[41] [[HTML5]] では [[HTML4]] から引き継いだ [CODE(HTMLe)@en[[[ins]]]] [[要素]]や
[CODE(HTMLe)@en[[[del]]]] [[要素]]の [CODE(HTMLa)@en[[[datetime]]]] [[属性]]のための[[日付形式]]
(現在の[[大域日時]]) に加え、
[CODE(HTMLe)@en[[[time]]]] [[要素]]のための[[日付や時刻]]の書式が導入されました。
[42] その後 [[Web Forms 2.0]] が [[HTML5]] に統合された際に、これらの定義は整理され、
本稿で紹介したような形になりました。この時、[[1万年問題]]への対応など細かい点が改められています。
[82] [CITE[Issues relating to the syntax of dates and times]] ([[Ian Hickson <ian@...>]] 著, [TIME[2008-11-25 11:22:31 +09:00]] 版) <http://permalink.gmane.org/gmane.org.w3c.whatwg.discuss/16763>
* 関連
[60] [[時刻]]でなく[[時間]]を表すものとしては、
[CODE(HTMLa)@en[[[http-equiv]]]] [[属性]]が [CODE(HTTP)@en[[[Refresh]]]]
の場合の [CODE(HTMLa)@en[[[content]]]] [[属性値]]の書式 ([[秒]]数を指定) があります。
以前の [[HTML5]] 案には [CODE(HTMLe)@en[[[audio]]]] [[要素]]や [CODE(HTMLe)@en[[[video]]]] [[要素]]に[[媒体]]中の[[時間]]的位置を表す[[内容属性]]がありましたが、
既に削除されています。
[[秒]]数を返す [[DOM属性]]は削除されずに残っています。
[83] [CITE@en[(X)HTML5 Tracking]]
([TIME[2009-08-23 10:09:22 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=2380&to=2381>
[84] [CITE@en[(X)HTML5 Tracking]]
([TIME[2009-08-23 10:11:22 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=2381&to=2382>
[85] [CITE@en[(X)HTML5 Tracking]] ([TIME[2009-10-18 17:21:48 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=3717&to=3718>
@@ [86] >>85 の変更分を反映する
[87] [CITE@en[(X)HTML5 Tracking]]
([TIME[2009-10-25 11:25:22 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=4317&to=4318>
[88] [CITE@en[Web Applications 1.0 r6235 Define the serialisation requirments for type=datetime.]]
( ([TIME[2011-06-16 08:13:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=6234&to=6235>
* メモ
[89] [CITE[Basic Data Types and Interfaces – SVG 1.1 (Second Edition)]]
( ([TIME[2011-08-10 12:35:27 +09:00]] 版))
<http://www.w3.org/TR/2011/REC-SVG11-20110816/types.html#DataTypeTime>
[90] [CITE@en[Web Applications 1.0 r6892 Limit the number of digits in the fraction part of a seconds time component to 3, since more than that and you lose precision when converting to milliseconds, e.g. for use with Date objects in the API.]]
( ([TIME[2012-01-12 08:14:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=6891&to=6892>
[91] [CITE['''['''whatwg''']''' Time Parsing]]
([TIME[2012-01-12 09:07:23 +09:00]] 版)
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-January/034344.html>
[92] [CITE@en[Web Applications 1.0 r6893 Define how to convert a time to a Date object if it's not a round number of milliseconds.]]
( ([TIME[2012-01-12 09:03:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=6892&to=6893>