/[pub]/suikawiki/sw4data/ids/8/458.txt
Suika

Contents of /suikawiki/sw4data/ids/8/458.txt

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.8 - (hide annotations) (download)
Sat Dec 13 05:42:31 2008 UTC (16 years, 6 months ago) by wakaba
Branch: MAIN
Changes since 1.7: +41 -6 lines
File MIME type: text/plain
updated by (anon)

1 wakaba 1.2 [7] [[HTML]] ではいくつかの[[属性]]などで[[日時]]を表す文字列が用いられています。
2     そのほとんどは [[ISO 8601の日付形式]]に近いものですが、歴史的な理由により異なる書式を採用している文脈もあります。
3    
4 wakaba 1.3 [[HTML]] で定義されている[[日付形式]]には、次のものがあります。
5     - [[時刻]]
6     - [[月]]
7     - [[日付]]
8     - [[地方日時]]
9     - [[大域日時]]
10     - [[日付か時刻]]
11 wakaba 1.8 - [[週]]
12 wakaba 1.3
13 wakaba 1.2 [8] 仕様書:
14     - [[HTML5]] <http://www.whatwg.org/specs/web-apps/current-work/#dates-and-times>
15    
16     * 定義
17    
18     [10] [DFN[[RUBYB[数字]@en[digit]]]]とは、
19 wakaba 1.4 [CODE(char)[[[U+0030]]]]〜[CODE(char)[[[U+0039]]]] の[[文字]]であって、
20 wakaba 1.2 [[十進数]]を表すために使われます [SRC@en[[[HTML5]]]]。
21    
22     [9] ある[[年]]のある[[月]]の[[日]]の数は、[[グレゴリオ暦]]に基づき、次のように定義されています
23     [SRC@en[[[HTML5]]]]。
24     - [[1月]]、[[3月]]、[[5月]]、[[7月]]、[[8月]]、[[10月]]、[[12月]]は、 '''31'''
25     - [[4月]]、[[6月]]、[[9月]]、[[11月]]は、 '''30'''
26     - [[2月]]は、
27     -- [[年]]が400で割り切れるか、または4で割り切れて100で割り切れないなら
28     ([[閏年]]なら)、 '''29'''
29     -- それ以外なら、 '''28'''
30    
31 wakaba 1.4 * 時刻
32    
33     [20] [DFN[[RUBYB[時刻]@en[time]]]]は、特定の[[時刻]]を表し、
34     [[時]]、[[分]]、[[秒]]、[[秒の小数部]]から成ります。[[時間帯]]の情報は持ちません。
35     [SRC@en[[[HTML5]]]]
36    
37     -[21] [CODE(ABNF)[[DFN[[RUBYB[妥当な時刻文字列]@en[valid time string]]]] := 2[[数字]] ":" 2[[数字]] [":" 2[[数字]] ["." 1*[[数字]] ] ] ]]
38     [SRC@en[[[HTML5]]]]
39     -- 1つ目の[[数字]]列は、[[時]]を表す 0〜23 の[[数]]
40     -- 2つ目の[[数字]]列は、[[分]]を表す 0〜59 の[[数]]
41     -- 3つ目の[[数字]]列は、[[秒]]の[[整数部]]を表す 0〜59 の[[数]] ([[秒]]が 0 の時だけ省略可能)
42     -- 4つ目の[[数字]]列は、[[秒]]の[[小数部]]を表す値 ([[秒]]が[[整数]]の時だけ省略可能)
43    
44     [23] [DFN[[RUBYB[時刻文字列の構文解析]@en[parse a time string]]]]
45     [SRC@en[[[HTML5]]]]:
46     = [[時刻部品の構文解析]]を行い、それが何も返さなかったら、何も返さないで終える
47     = [[文字列]]がそれで終わっていなければ、何も返さないで終える
48     = (1) で得られた[[時]]と[[分]]と[[秒]]を返す
49    
50     [24] [DFN[[RUBYB[時刻部品の構文解析][parse a time component]]]]
51     [SRC@en[[[HTML5]]]]:
52     = [[文字列]]が[[正規表現]] [CODE(regexp)[([[数字]]{2}):([[数字]]{2})(?::([[数字]]{2}(?:\.[[数字]]+)?))?]]
53     に[[一致]]しない場合、何も返さず終わる
54     = $1 を[[十進数]]として解釈したものを[[時]]とする
55     = $2 を[[十進数]]として解釈したものを[[分]]とする
56     = $3 を[[十進数]]として解釈したものを[[秒]]とする ($3 がない場合、 0 とする)
57     = [[時]]が 0〜23 でない場合、何も返さない
58     = [[分]]が 0〜59 でない場合、何も返さない
59     = [[秒]]が 60 [[未満]]の[[正数]]でない場合、何も返さない
60     = [[時]]と[[分]]と[[秒]]を返す
61    
62 wakaba 1.2 * 月
63    
64     [11] [DFN[[RUBYB[月]@en[month]]]]は、[[グレゴリオ暦]]上の[[日付]]を表します。ただし、
65     [[月]]は[[時間帯]]の情報を持ちませんし、[[日付]]の精度は[[年]]と[[月]]だけで、[[日]]は特定しません。
66     [SRC@en[[[HTML5]]]]
67    
68     - [13] [CODE(ABNF)[[DFN[[RUBYB[妥当な月]@en[valid month]]]] := 4*[[数字]] "-" 2[[数字]]]]
69     [SRC@en[[[HTML5]]]]
70     -- 1つ目の[[数字]]列は、[[年]]を表す[[正数]]
71 wakaba 1.3 -- 2つ目の[[数字]]列は、[[月]]を表す 1〜12 の[[数]]
72 wakaba 1.2
73     [14] [DFN[[RUBYB[月文字列の構文解析]@en[parse a month string]]]]
74     [SRC@en[[[HTML5]]]]:
75     = [[月部品の構文解析]]を行い、それが何も返さなかったら、何も返さないで終える
76     = [[文字列]]がそれで終わっていなければ、何も返さないで終える
77     = (1) で得られた[[年]]と[[月]]を返す
78    
79 wakaba 1.3 [15] [DFN[[RUBYB[月部品の構文解析][parse a month component]]]]
80 wakaba 1.2 [SRC@en[[[HTML5]]]]:
81 wakaba 1.4 - 与えられた[[文字列]]が[[正規表現]] [CODE(regexp)[([[数字]]{4,})-([[数字]]{2})]]
82 wakaba 1.2 に[[一致]]すれば、
83     -= $1 を[[十進数]]として解釈したものを[[年]]とする
84     -= $2 を[[十進数]]として解釈したものを[[月]]とする
85     -= [[年]]が 0 なら、何も返さない
86 wakaba 1.3 -= [[月]]が 1〜12 でなければ、何も返さない
87 wakaba 1.2 -= そうでない場合、[[年]]と[[月]]を返す
88     - そうでない場合、何も返さない
89 wakaba 1.3
90     * 日付
91    
92     [16] [DFN[[RUBYB[日付]@en[date]]]]は、[[グレゴリオ暦]]上の[[日付]]を表します。
93     [[日付]]には[[年]]、[[月]]、[[日]]が含まれますが、[[時間帯]]は含まれません。
94     [SRC@en[[[HTML5]]]]
95    
96     -[17] [CODE(ABNF)@en[[DFN[[RUBYB[妥当な日付文字列]@en[valid date string]]]] := [[妥当な月文字列]] "-" 2[[数字]]]]
97     [SRC@en[[[HTML5]]]]
98     -- 最後の[[数字]]列は、[[年]]と[[月]]に基づく[[日]]の数 (>>9) [[以下]]の[[正数]]で、[[日]]を表す
99    
100     [18] [DFN[[RUBYB[日付文字列の構文解析]@en[parse a date string]]]]
101     [SRC@en[[[HTML5]]]]:
102     = [[日付部品の構文解析]]を行い、それが何も返さなかったら、何も返さないで終える
103     = [[文字列]]がそれで終わっていなければ、何も返さないで終える
104     = (1) で得られた[[年]]と[[月]]と[[日]]を返す
105    
106     [19] [DFN[[RUBYB[日付部品の構文解析][parse a date component]]]]
107     [SRC@en[[[HTML5]]]]:
108     = [[月部品の構文解析]]により、[[年]]と[[月]]を得る。何も返されなかった場合、何も返さず終わる
109 wakaba 1.4 = [[文字列]]の続きが[[正規表現]] [CODE(regexp)[-([[数字]]{2})]] に[[一致]]しない場合、何も返さず終わる
110 wakaba 1.3 = $1 を[[十進数]]として解釈したものを[[日]]とする
111 wakaba 1.4 = [[日]]が[[年]]と[[月]]に基づく[[日]]の数 (>>9) [[以下]]の[[正数]]でなければ、何も返さず終わる
112 wakaba 1.3 = [[年]]と[[月]]と[[日]]を返す
113 wakaba 1.2
114 wakaba 1.5 * 地方日時
115    
116     [25] [DFN[[RUBYB[地方日時]@en[local date and time]]]]は、
117     [[グレゴリオ暦]]上の[[日時]]を表します。
118     [[年]]、[[月]]、[[日]]、[[時]]、[[分]]、[[秒]]、[[秒の小数部]]から成ります。
119     [[時間帯]]の情報は含みません。
120     [SRC@em[[[HTML5]]]]
121    
122     -[26] [CODE(ABNF)@en[[DFN[[RUBYB[妥当な地方日時文字列]@en[valid local date and time string]]]] := [[妥当な日時文字列]] 'T' [[妥当な時刻文字列]]]]
123     [SRC@em[[[HTML5]]]]
124     -- 「T」は[[大文字]]でなければなりません。
125    
126     [27] [DFN[[RUBYB[地方日時文字列の構文解析]@en[parse a local date and time string]]]] [SRC@en[[[HTML5]]]]:
127     = [[日付部品の構文解析]]により、[[年]]と[[月]]と[[日]]を得る。何も返されなかった場合、
128     何も返さず終わる
129     = [[文字列]]の次の[[文字]]が[[大文字]]の「[CODE(char)[[[T]]]]」でない場合、
130     何も返さず終わる
131     = [[時刻部品の構文解析]]により、[[時]]と[[分]]と[[秒]]を得る。何も返されなかった場合、
132     何も返さず終わる
133     = [[文字列]]がそれで終わっていなければ、何も返さず終わる
134     = [[年]]と[[月]]と[[日]]と[[時]]と[[分]]と[[秒]]を返す
135    
136 wakaba 1.6 * 時間帯
137    
138     [28] [[大域日時]]や[[日付や時刻]]には[RUBYB[[[時間帯]]]@en[timezone]]の情報を含めることができます。
139     [[時間帯]]には、[[時]]と[[分]]の情報が含まれます。
140    
141     - [CODE(ABNF)@en[[DFN[時間帯]] := '[[Z]]' / ("[[+]]" / "[[-]]") 2[[数字]] ":" 2[[数字]]]]
142     [SRC@en[[[HTML5]]]]
143     -- 「[CODE(char)[[[Z]]]]」は [[UTC]] を表す
144     -- 1つ目の[[数字]]列は[[時差]]の[[時]]を表す 0〜23 の[[数]]
145     -- 2つ目の[[数字]]列は[[時差]]の[[分]]を表す 0〜59 の[[数]]
146    
147     [29] [DFN[[RUBYB[時間帯部品の構文解析]@en[parse a timezone component]]]] [SRC@en[[[HTML5]]]]:
148     = 次の[[文字]]が[[大文字]]の「[CODE(char)[[[Z]]]]」 であれば、
149     [[時]]として 0、[[分]]として 0 を返して終わる
150     = [[文字列]]が[[正規表現]] [CODE(regexp)[([+-]2[[数字]]):(2[[数字]])]] に[[一致]]しない場合、
151     何も返さずに終わる
152     = $1 を[[十進数]]として解釈したものを[[時]]とする
153     = $2 を[[十進数]]として解釈したものを[[分]]とする
154     = [[時]]が -23〜23 でない場合、何も返さない
155     = [[分]]が 0〜59 でない場合、何も返さない
156     = [[時]]と[[分]]を返す
157    
158     [30] [[RFC 3339の日付形式]]などでは [[-00:00]] に[[時間帯]]不明という意味が与えられていますが、
159     [[HTML]] の[[日付形式]]では特にそのような規定はありません。
160    
161     * 大域日時
162    
163     [31] [DFN[[RUBYB[大域日時]@en[global date and time]]]]は、
164     [[グレゴリオ暦]]上の[[日時]]を表します。
165     [[年]]、[[月]]、[[日]]、[[時]]、[[分]]、[[秒]]、[[秒の小数部]]、[[時間帯]]から成ります。
166     [SRC@em[[[HTML5]]]]
167    
168     -[32] [CODE(ABNF)@en[[DFN[[RUBYB[妥当な大域日時文字列]@en[valid global date and time string]]]] := [[妥当な日時文字列]] '[[T]]' [[妥当な時刻文字列]] [[時間帯]]]]
169     [SRC@em[[[HTML5]]]]
170     -- 「[CODE(char)[[[T]]]]」は[[大文字]]でなければなりません。
171    
172 wakaba 1.7 [33] [DFN[[RUBYB[大域日時文字列の構文解析]@en[parse a global date and time string]]]] [SRC@en[[[HTML5]]]]:
173 wakaba 1.6 = [[日付部品の構文解析]]により、[[年]]と[[月]]と[[日]]を得る。何も返されなかった場合、
174     何も返さず終わる
175     = [[文字列]]の次の[[文字]]が[[大文字]]の「[CODE(char)[[[T]]]]」でない場合、
176     何も返さず終わる
177     = [[時刻部品の構文解析]]により、[[時]]と[[分]]と[[秒]]を得る。何も返されなかった場合、
178     何も返さず終わる
179     = [[時間帯部品の構文解析]]により、[[時間帯]]の[[時]]と[[分]]を得る。何も返されなかった場合、
180     何も返さず終わる
181     = [[文字列]]がそれで終わっていなければ、何も返さず終わる
182     = [[年]]と[[月]]と[[日]]と[[時]]と[[分]]と[[秒]]と[[時間帯]]の[[時]]と[[分]]を返す
183    
184 wakaba 1.7 ** 例
185    
186     [34] [CODE(HTML example)[0037-12-13T00:00Z]] [SRC@en[[[HTML5]]]]
187    
188     [[ローマ皇帝]][[ネロ]]の[[誕生日]] ([[ユリウス暦]]37年12月15日の[[グレゴリオ暦]]換算)
189     の[[真夜中]]を表します。なお、
190     [CODE(HTML bad example)[[[37-12-13]]]] は[[年]]が4桁に満たないので、
191     [[妥当な大域日時文字列]]ではありません。
192    
193     [35] [CODE(HTML example)[1979-10-14T12:00:00.001-04:00]] [SRC@en[[[HTML5]]]]
194    
195     [[北米東海岸]]の[[夏時刻]]中の1979年10月14日の[[正午]]から1[[ミリ秒]]後を表します。
196    
197     [36] [CODE(HTML example)[8592-01-01T02:09+02:09]] [SRC@en[[[HTML5]]]]
198    
199     将来の[[時刻]]です。端数の[[時間帯]]は現在[[地球上]]では用いられていませんが、
200     仕様上は認められています。
201    
202 wakaba 1.8 * 週
203    
204     [43] [DFN[[RUBYB[週]@en[week]]]]は、
205     [RUBYB[[[週年]]]@en[week‐year]]番号と週番号から成り、
206     7日間の期間を表します。 [SRC@en[[[HTML5]]]]
207    
208     [[週]]は次のようなものです [SRC@en[[[HTML5]]]]。
209     - 1つの[[週年]]は52か53の[[週]]を含みます。
210     -- [[木曜日]]から始まる[[年]]と[[閏年]]は '''53''' です。
211     -- それ以外の[[年]]は '''52''' です。
212     -- なお、[[12月31日]]を含む[[週]]の番号が[DFN[[RUBYB[最終日の週番号]@en[week number of the last day]]]]です。
213     - [[週]]は7日間の期間です。
214     - [[1970年]]の 1 番の[[週]]は[[1969年]]12月29日 ([[月曜日]]) に始まります。
215    
216     ;; [[グレゴリオ暦]]における[[年]]の中で最初の[[木曜日]]を含む[[週]]が、
217     ある[[週年]]の最初の[[週]]になります。 [SRC@en[[[HTML5]]]]
218    
219     -[44] [CODE(ABNF)[[DFN[[RUBYB[妥当な週文字列]@en[valid week string]]]] ;= 4*[[数字]] '-W' 2[[数字]]]]
220     [SRC@en[[[HTML5]]]]
221     -- 1つ目のの[[数字]]列は[[週年]]を表す[[正数]]
222     -- 2つ目の[[数字]]列は[[週]]を表す[[最終日の週番号]][[以下]]の[[正数]]
223    
224     [45] [DFN[[RUBYB[週文字列の構文解析]@en[parse a week string]]]] [SRC@en[[[HTML5]]]]:
225     = 与えられた[[文字列]]''全体''が[[正規表現]] [CODE(regexp)[([[数字]]{4,})-W([[数字]]{2})]]
226     に[[一致]]しない場合、何も返さないで終わる
227     = $1 を[[十進数]]として解釈したものを[[週年]]とする
228     = $2 を[[十進数]]として解釈したものを[[週]]とする
229     = [[週年]]が 0 なら、何も返さないで終わる
230     = [[週]]が 1〜[[最終日の週番号]] でなければ、何も返さないで終わる
231     = [[週年]]と[[年]]を返す
232    
233     * 暦法との関係
234    
235     ** 過去の日付
236 wakaba 1.2
237     [12] [[HTML]] は[[グレゴリオ暦]] (だけ) を採用しています。[[グレゴリオ暦]]が採用される以前の[[日付]]も表すことができますが、
238     [[グレゴリオ暦]]を過去に延長した場合に相当する[[日付]]を使って表されます
239     (proleptic グレゴリオ暦などと呼ばれます)。
240 wakaba 1.4
241 wakaba 1.7 [39] [[年]]は[[正数]]のみを指定できます。0年や負の年は認められていません。
242    
243 wakaba 1.8 ** 将来の日付
244 wakaba 1.7
245     [37] 現在の版の [[HTML5]] では、[[年]]の桁数が4桁以上で無制限とされており、[[1万年問題]]は存在しません。
246    
247     [38] 過去の版の [[HTML5]] 案や [[Web Forms 2.0]] や [[HTML4]] では[[年]]は4桁に制限されていました。
248 wakaba 1.8
249     ** 閏秒
250    
251     [22] [[HTML]] の[[日付形式]]は[[閏秒]]に対応していません。[[秒]]の部分に 60 や 61
252     を使うことは認められていません。
253 wakaba 1.7
254     * 歴史
255    
256     ** [CODE(SGML)[%Datetime;]] 型 (HTML4/XHTML1)
257 wakaba 1.1
258     [1] [[HTML 4]] の [DFN[[CODE(SGML)[%Datetime]]]] 型は、
259     [[W3C-DTF]] の2番目に長い (秒未満までは表現できない)
260     形式です。
261    
262     [6] 仕様書:
263     - [[HTML 4]]
264     -- <IW:HTML4:"types.html#type-datetime">
265     -- [[厳密DTD]] <IW:HTML4:"sgml/dtd.html#Datetime">
266     -- [[移行用DTD]] <IW:HTML4:"sgml/loosedtd.html#Datetime">
267     -[[XHTML 1.0]]
268     -- [CSECTION[A.1.1. XHTML-1.0-Strict]]
269     <http://www.w3.org/TR/2002/REC-xhtml1-20020801/dtds.html#dtdentry_xhtml1-strict.dtd_Datetime>
270     -- [CSECTION[A.1.2. XHTML-1.0-Transitional]]
271     <http://www.w3.org/TR/2002/REC-xhtml1-20020801/dtds.html#dtdentry_xhtml1-transitional.dtd_Datetime>
272     -- [CSECTION[A.1.3. XHTML-1.0-Frameset]]
273     <http://www.w3.org/TR/2002/REC-xhtml1-20020801/dtds.html#dtdentry_xhtml1-frameset.dtd_Datetime>
274     - [[XHTML m12n]]
275     --[CSECTION[4.3. Attribute Types]]
276     <IW:XHTML1m12n:"abstraction.html#dt_Datetime">
277    
278     [5]
279     :[[引数実体名]]:[CODE(SGML)[%Datetime]] ([[HTML 4]], [[XHTML 1.0]])
280     :抽象属性型名:[CODE[Datetime]] ([[XHTML m12n]])
281     :属性型名:[Q[datetime]] ([[HTML 4]])
282     :[[SGML]] [[属性型]]:[CODE(SGML)[[[CDATA]]]]
283     :[[XML]] [[属性型]]:[CODE(XML)[[[CDATA]]]]
284     :大文字・小文字:区別あり
285    
286     [2] 大文字・小文字は区別されます。
287     [CODE(HTML)[T]] と [CODE(HTML)[Z]] が使われ得ますが、
288     いずれも大文字でなければなりません。
289    
290     [3] 時・分・秒が得られない時は、 [CODE(HTML)[00]]
291     としてもよいことになっています。
292     閏秒の 60秒は W3C‐DTF では表現できません。
293    
294     [4]
295     [CODE(HTMLe)[[[ins]]]] 要素や [CODE(HTMLe)[[[del]]]] 要素の [CODE(HTMLa)[[[datetime]]]] 属性が [CODE(SGML)[%Datetime]] 型です。
296    
297 wakaba 1.7 ** HTML5 案
298    
299     [40] 現在 [[HTML]] で定義されている[[日付形式]]のほとんどは、 [[Web Forms 2.0]]
300     で[[日時]]関係の[[フォーム制御子]]を実現するために導入されました。
301 wakaba 1.1
302 wakaba 1.7 [41] [[HTML5]] では [[HTML4]] から引き継いだ [CODE(HTMLe)@en[[[ins]]]] [[要素]]や
303     [CODE(HTMLe)@en[[[del]]]] [[要素]]の [CODE(HTMLa)@en[[[datetime]]]] [[属性]]のための[[日付形式]]
304     (現在の[[大域日時]]) に加え、
305     [CODE(HTMLe)@en[[[time]]]] [[要素]]のための[[日付や時刻]]の書式が導入されました。
306 wakaba 1.1
307 wakaba 1.7 [42] その後 [[Web Forms 2.0]] が [[HTML5]] に統合された際に、これらの定義は整理され、
308     本稿で紹介したような形になりました。この時、[[1万年問題]]への対応など細かい点が改められています。
309 wakaba 1.1

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24