c

LDML/CLDR 週

[90] LDMLのバリエーションの記述の方法を定めています。 CLDRLDML を使って各ロケールにおけるの定義を提供しています。

仕様書

[3] UAX #35 (LDML) が構文を定め、 CLDRロケール定義を提供し、 ICU が実装するという関係になっています。 その母体となる標準化団体Unicode Consortium です。

[4] The Unicode Standard 本体と同じ標準化団体ですが、 仕様としては別物です。

[5] 実装はそれ以外にもあるかもしれません。 LDML, CLDR, ICU

LDML 要素

[65] LDMLロケールデータファイル用のXML要素として、 day 要素があります。 type 属性必須です。 その内容PCDATA です。 >>64

[66] day 要素type 属性列挙属性で、 sun, mon, tue, wed, thu, fri, sat を指定できます。 >>64 曜日を表し、それぞれ日曜日月曜日、... 土曜日です。 要素内容が当該ロケールにおいて指定された曜日を表す文字列であることを意味します。

[67] 他の構造には数値を使っていますが、曜日に短い文字列を使っているのは、 普遍的に受け入れられている数値表現がないため、 と説明されています。 >>64


[6] LDMLロケールデータファイル用の XML要素として、 weekData 要素があります。 その内容は、 minDays, firstDays, weekendStart, weekEnd, weekOfPreference要素で、この順序で、各0個以上含められます。 >>1

[61] weekData 要素は、 supplementalData 要素に含められます。 >>63


[7] minDays強制空要素で、 count 属性territories 属性必須です。 >>1

[8] firstDay, weekendStart, weekendEnd はすべて強制空要素で、 day 属性territories 属性必須です。 >>1

[11] minDays, firstDay, weekendStart, weekendEnd要素territories 属性は、 NMTOKENS を指定できます。 >>1 要素領土ごとの情報を表しており、 territories 属性値の各名前字句が該当する領土を表しています。 同じ情報を持つ領土は1つの要素にまとめることができ、 別の情報を持つ領土は別の要素で表します。 領土 001要素によって既定値の情報を記述できます >>1

[9] minDays 要素count 属性列挙属性で、 1 から 7 までのASCII数字を指定できます。 >>1 数を表します。 の最初のの決定方法を指定するものです (>>15)。

[10] firstDay, weekendStart, weekendEnd要素day 属性列挙属性で、 sun, mon, tue, wed, thu, fri, sat を指定できます。 >>1 曜日を表し、それぞれ日曜日月曜日、... 土曜日です。 週初 (>>27) や週末 (>>30) を指定するものです。


[12] weekOfPreference 要素強制空要素で、 locales 属性ordering 属性必須です。 >>1

[13] weekOfPreference 要素locales 属性は、 NMTOKENS を指定できます。 >>1 要素ロケールごとの情報を表しており、 locales 属性値の各名前字句が該当するロケールを表しています。 同じ情報を持つロケールは1つの要素にまとめることができ、 別の情報を持つロケールは別の要素で表します。 ロケール und要素によって既定値の情報を記述できます >>1

[14] weekOfPreference 要素ordering 属性は、 NMTOKENS を指定できます。 >>1 週の表記法の優先順位を表します (>>52)。

[24] LDML七曜があてられた7日間の期間としているようです。 七曜は途切れず繰り返される前提としているようです。

[25] 7日以外のや、週外日のようなものは扱えません。

[91] グレゴリオ暦以外との併用も想定されています。 >>69 しかしどの程度までカバーしているのかはよくわかりません。 例えば週外日があるminDays のような指定は整合しませんが、特に何の規定もありません。 また、 同じロケールで複数の暦法が併用されるときの挙動も明確ではありません。

[92] 例えばユリウスグレゴリオ暦年の週週番号を数えることが想定されているのか、 どうなのかわかりません。 (そもそも LDML でそういう暦法が記述できるのかどうか。)

[93] 例えばグレゴリオ暦イスラム暦を併用するロケール週番号をどう数えるのかよくわかりません。 (そもそも LDML でそういうものが記述できるのかどうか。)

週初と週末

[27] カレンダー表示のの最初のとして表示するべきなのが、 firstDay で指定された曜日です。 >>1

[86] 日付書式パターンにおいての計算上のの最初のにも使います。 >>85

[29] 週の日の番号付け (day-of-week numbering) は、 カレンダー表示のの最初の1 として数えていきます。 将来は別途指定できるようにするかもしれないとされています。 >>1

[28] 週末の後の最初のの最初の労働日 (work day) は、 週末から決定するべきものです。 必ずしもカレンダー表示のの最初のと同じとは限りません。 >>1

[34] CLDR は本段落執筆時点では次のようにしています。 >>2

[42] 既定値を表す 001 や、欧州などが月曜日になっています。 日本を含むアジアや、 米国を含む米大陸方面などが日曜日になっています。 アラブ諸国などが土曜日に、 モルディブ金曜日になっています。

[39] 更に次のような要素があります。 >>2

		<firstDay day="sun" territories="GB" alt="variant" references="Shorter Oxford Dictionary (5th edition, 2002)"/>

[40] alt 属性と references 属性UAX #35DTD 片にない属性で意味は未詳です。 文言から推測すると、 英国は一般に月曜日始まりのところ、 日曜日始まりとすることもあって、 Shorter Oxford Dictionary がその出典である、 といったところでしょうか。

[41] なぜ英国のこの1例だけ別案が示されているのか不思議です。


[30] 週末weekendStart で指定された曜日から weekendEnd で指定された曜日までです。

[31] 週末 (weekend) が何を意味するかはによります。 一般には小売業以外のほとんどが休業する時期です。 >>1

[32] 時刻も指定できる >>85時刻は「well-recognized part of the day」でなければ指定するべきではない >>1 とされますが、 現行 LDML 仕様の DTD 片にはそのような指定がそもそも存在していません。過去には存在していたのでしょうか。 それとも他の規定が混入したのでしょうか。

[87] 過去の日本土曜日半ドンのようなものを記述できる想定だったのかもしれません。

[33] LDML では weekendStart の既定値は satweekendEnd の既定値は sun とされます。 >>1 しかし CLDR001 領土の値を明示的に定義しています。 この既定値は何のためのものでしょうか。 CLDR 以外の用途を想定したのでしょうか? でも不思議なことに他の要素には既定値がなく、ここでだけ規定されています。

[45] CLDR は本段落執筆時点では次のようにしています。 >>2

		

[43] LDML の仕様では領土単位でしか記述できません。 領土以外のロケールの要素による違いや、 位相差、個人差は扱えません。

週名の表記

[52] ロケールごとの週の指定 (week designation) の種類の優先順位は、 weekOfPreference 要素で記述されます。 >>1

[53] 次の4種類の値があります。 >>4 LDML属性値として1つ以上、それぞれを高々1つ記述されることが求められると思われます。

[58] CLDR は本段落執筆時点では次のようにしています。 >>2

l
ロケール
weekOfYear
weekOfYear
weekOfMonth
weekOfMonth
weekOfDate
weekOfDate
weekOfInterval
weekOfInterval
l
und
weekOfYear
1
l
am az bs cs cy da el et hi ky lt mk sk ta th
weekOfYear
1
weekOfMonth
2
l
is mn no sv vi
weekOfYear
1
weekOfMonth
2
weekOfInterval
3
l
fi zh_TW
weekOfYear
1
weekOfDate
2
weekOfMonth
3
l
zu
weekOfYear
1
weekOfInterval
2
l
ca es fr gl
weekOfDate
1
l
en bn ja ka
weekOfDate
1
weekOfMonth
2
l
bg de iw pt ur zh
weekOfDate
1
weekOfMonth
2
weekOfInterval
3
l
nl
weekOfDate
1
weekOfYear
2
weekOfMonth
3
l
af
weekOfDate
1
weekOfInterval
2
weekOfMonth
3
l
ar fil gu hu hy id kk ko
weekOfMonth
1
weekOfMonth
1
weekOfYear
2
l
km mr
weekOfMonth
1
weekOfYear
2
weekOfInterval
3
weekOfDate
4
l
ms tr
weekOfMonth
1
weekOfDate
2
l
eu
weekOfMonth
1
weekOfDate
2
weekOfYear
3
l
kn ml pa
weekOfMonth
1
weekOfInterval
2
l
fa hr it lv pl si sr uk uz
weekOfMonth
1
weekOfInterval
2
weekOfYear
3
l
sw te
weekOfMonth
1
weekOfInterval
2
weekOfDate
3
weekOfYear
4
l
lo sq
weekOfInterval
1
l
sl
weekOfInterval
1
weekOfMonth
2
l
be ro ru

[59] このデータがどれだけ信頼できるかというと、怪しい気がします。 の表記は年月日ほど安定しておらず (優先度2位以下を持つロケールが多いことがそれを証明しています)、 の単位ではこう表記するべき、 と決定できるところがまず少ないのではないかと疑われます。

[60] ja では weekOfDate が第1位、 weekOfMonth が第2位になっています。 日本国日本語では、 確かに「何月何日の週」のような言い方はしますし、 「何月第何週」のような言い方もします。 でも前者が優勢かというと、 自信を持って肯定するのも否定するのも難しいのではないでしょうか。 どちらかというと 「何月第何週」 の方が定期スケジュールの記述には多い気がします。 スケジュール確認の場面では 「何月何日の週」 が多い気がします (「何月第何週」の安定した定義がないと理解されているからかもしれません)。 出来事や予定を一覧にする場面では、 「何月何日から何月何日の週」 の表記も見かけます (がこのデータには weekOfInterval がないですね)。

[68] 併記という選択肢は記述できません。

年の週と月の週

[15] 年の週の計算 (week-of-year calculation) における年の最初の週の決定や、 月の週の計算 (week-of-month calculation) における月の最初の週の決定では、 minDays で指定された値を使って、 その以上が含まれる、 それに満たないを前のとします。 >>1, >>85

[44] LDML の仕様書では明確ではありませんが、 週初からの7日間がとみなされるのでしょうか。

[16] CLDR は本段落執筆時点では次のようにしています。 >>2

[19] 1 は1日でも含まれれば新しいに属することを意味します。 既定値を表す 001 や、アメリカ合衆国などがこちらになっています。

[20] 4 は4日、つまり7日ある過半数が含まれれば新しいに属することを意味します。 欧州の多くがこちらになっています。 ISO週暦における週年と同じ決め方です。

[21] LDML2, 3, 5, 6, 7 も認めていますが、現在の CLDR にはそのような領土は登録されていません。

[22] LDML の仕様では所属年の決定方法と所属月の決定方法は変えられません。 (月が年に含まれるようにするためでしょうか。)

[23] LDML の仕様では「前の月の最終週かつ次の月の最初の週である週」や 「前の月の最終週 (7日に満たない) と次の月の最初の週 (7日に満たない)」 のようなものを扱えません。

[26] LDML の仕様では領土単位でしか記述できません。 領土以外のロケールの要素による違いや、 位相差、個人差は扱えません。

[88] CLDR で記述されたものがそのの実際の慣習を正確に記述できているかというと、 そうとも限らないでしょう。 明確な定めがなく曖昧に運用されている地域も少なくないのではないでしょうか。

[89] 7 の地域が1つもないのは意外ですね。 実際にはそのような数え方 (週全体が新年に収まる最初の週を第1週とする) もあるみたいです。 CLDR 調べによれば単位で最も優勢な数え方がそれである、 というは存在していない、という程度に理解するべきでしょう。


[83] 日付書式パターンでは、年の週ではの最初、 月の週ではの最初を 1とし、 23 と数えていきます。 >>83

日付書式パターンにおける週暦

[70] LDML の定める日時書式記述方式である日付書式パターンには、 週暦の要素を指定する方法があります。


[71] Y年の週に基づく暦 (“Week of Year” based calendar) におけるの数値を表します。 の変化はの境界で発生します。 >>69

[72] Y を複数個並べると、最低桁数になります。例えば YYYY0埋めして最低4桁の数値で表すことを意味します。 >>69

[73] 暦年を表す y とは違う値になることがあります >>69。 ところが誤って利用するケースが後を絶ちません。 暦年週年バグ どうして yY のような紛らわしい割り当て方をしたのでしょうか。 間違いやすいことは明白なのに。

[75] グレゴリオ暦以外の暦法でも使うことができます。 >>69


[76] w年の週 (Week of Year) の数値を表します。 >>69

[77] ww0埋めして2桁の数値で表すことを意味します。 >>69

[78] W月の週 (Week of Month) の数値を表します。 >>69

[79] FDay of Week in Month の数値を表します。 >>69

[80] 例えば「2」の水曜日なら第2水曜日を表すようです。


[81] E, e, c曜日を表します。 >>69

c
文字
1
1文字
2
2文字
3
3文字
4
4文字
5
5文字
6
6文字
c
E
1
E format abbreviated
2
EE format abbreviated
3
EEE format abbreviated
4
EEEE format wide
5
EEEEE format narrow
6
EEEEEE format short
c
e
1
e format 1桁数値
2
ee format 2桁数値
3
eee format abbreviated
4
eeee format wide
5
eeeee format narrow
6
eeeeee format short
c
c
1
c stand-alone 1桁数値
2
cc stand-alone 2桁数値
3
ccc stand-alone abbreviated
4
cccc stand-alone wide
5
ccccc stand-alone narrow
6
cccccc stand-alone short

[82] LDML では文字列の長さにより Narrow (T), Short (Tu), Abbreviated (Tue), Wide (Tuesday) の種別があります。 また、 一般の日時表示を想定した format と、 カレンダー等を想定した stand-alone があります。


[74] ISO 8601 で定義される ISO year-week calendar において Yw とを組み合わせて使うと説明されています。 >>69 グレゴリオ暦週初月曜日なら、 ISO週暦と同等のものを表すことになります。

[94] 不思議なことに週年はあるのに週ベースの月を表す記号がありません。 「年第週」 は記述できるのに、 「週」 は記述できません。

メモ