From 1546d4af2ed1219a41ef4170bf188f2ab91442e6 Mon Sep 17 00:00:00 2001 From: Apple Date: Wed, 31 Jul 2019 06:16:41 +0000 Subject: [PATCH] ICU-62135.0.1.tar.gz --- .../data/brkitr/dictionaries/cjdict.txt | 1 + icuSources/data/coll/ja.txt | 3 +- icuSources/data/lang/en.txt | 3 +- icuSources/data/locales/ar.txt | 1 + icuSources/data/locales/ast.txt | 3 + icuSources/data/locales/br.txt | 3 + icuSources/data/locales/bs_Cyrl.txt | 1 + icuSources/data/locales/cs.txt | 3 + icuSources/data/locales/de.txt | 1 + icuSources/data/locales/el.txt | 241 +++ icuSources/data/locales/en.txt | 78 +- icuSources/data/locales/fa.txt | 243 ++++ icuSources/data/locales/he.txt | 1 + icuSources/data/locales/hi.txt | 3 +- icuSources/data/locales/hr.txt | 1 + icuSources/data/locales/id.txt | 1 + icuSources/data/locales/ja.txt | 152 +- icuSources/data/locales/ko.txt | 1 + icuSources/data/locales/lo.txt | 1 + icuSources/data/locales/lt.txt | 1 + icuSources/data/locales/nb.txt | 3 + icuSources/data/locales/nl.txt | 3 + icuSources/data/locales/root.txt | 80 +- icuSources/data/locales/ru.txt | 1 + icuSources/data/locales/sr.txt | 1 + icuSources/data/locales/sr_Latn.txt | 1 + icuSources/data/locales/sv.txt | 1 + icuSources/data/locales/th.txt | 1 + icuSources/data/locales/uk.txt | 243 ++++ icuSources/data/locales/yue.txt | 1 + icuSources/data/locales/yue_Hans.txt | 1 + icuSources/data/locales/zh.txt | 3 + icuSources/data/locales/zh_Hant.txt | 3 + icuSources/data/misc/keyTypeData.txt | 1 + icuSources/data/misc/numberingSystems.txt | 5 + icuSources/data/misc/supplementalData.txt | 1287 ++++++++++------- icuSources/data/rbnf/ja.txt | 7 +- icuSources/data/region/ja.txt | 2 +- icuSources/i18n/Makefile.in | 2 +- icuSources/i18n/dtitvfmt.cpp | 3 + icuSources/i18n/dtitvinf.cpp | 4 +- icuSources/i18n/erarules.cpp | 311 ++++ icuSources/i18n/erarules.h | 98 ++ icuSources/i18n/i18n.vcxproj | 2 + icuSources/i18n/i18n.vcxproj.filters | 6 + icuSources/i18n/i18n_uwp.vcxproj | 2 + icuSources/i18n/japancal.cpp | 483 ++----- icuSources/i18n/japancal.h | 23 +- icuSources/i18n/smpdtfmt.cpp | 52 +- icuSources/i18n/ucln_in.h | 1 + icuSources/i18n/unicode/calendar.h | 26 +- icuSources/i18n/unicode/smpdtfmt.h | 1 + icuSources/i18n/unicode/ucal.h | 15 +- icuSources/i18n/unicode/udat.h | 21 + icuSources/test/cintltst/ccaltst.c | 58 + icuSources/test/cintltst/cdattst.c | 40 + icuSources/test/intltest/Makefile.in | 2 +- icuSources/test/intltest/dtifmtts.cpp | 640 ++++---- icuSources/test/intltest/dtptngts.cpp | 4 +- icuSources/test/intltest/erarulestest.cpp | 130 ++ icuSources/test/intltest/erarulestest.h | 23 + icuSources/test/intltest/incaltst.cpp | 97 +- icuSources/test/intltest/incaltst.h | 1 + icuSources/test/intltest/intltest.vcxproj | 2 + .../test/intltest/intltest.vcxproj.filters | 8 +- icuSources/test/intltest/itformat.cpp | 2 + icuSources/test/testdata/rbbitst.txt | 10 + icuSources/test/testdata/structLocale.txt | 560 ++++++- 68 files changed, 3781 insertions(+), 1232 deletions(-) create mode 100644 icuSources/i18n/erarules.cpp create mode 100644 icuSources/i18n/erarules.h create mode 100644 icuSources/test/intltest/erarulestest.cpp create mode 100644 icuSources/test/intltest/erarulestest.h diff --git a/icuSources/data/brkitr/dictionaries/cjdict.txt b/icuSources/data/brkitr/dictionaries/cjdict.txt index 34216976..b30a8637 100644 --- a/icuSources/data/brkitr/dictionaries/cjdict.txt +++ b/icuSources/data/brkitr/dictionaries/cjdict.txt @@ -55994,6 +55994,7 @@ 令出惟行 164 令叔 142 令名 245 +令和 61 令嗣 136 令堂 127 令太郎 245 diff --git a/icuSources/data/coll/ja.txt b/icuSources/data/coll/ja.txt index de42a2e6..69458d22 100644 --- a/icuSources/data/coll/ja.txt +++ b/icuSources/data/coll/ja.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ja{ - Version{"2.1.19.14"} + Version{"2.1.19.15"} collations{ private-kana{ Sequence{ @@ -416,6 +416,7 @@ ja{ } standard{ Sequence{ + "&ヽ<*㍾㍽㍼㍻㋿" "[import ja-u-co-private-kana]" "&[last regular]<*亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙" } diff --git a/icuSources/data/lang/en.txt b/icuSources/data/lang/en.txt index ebf366ab..20f738a2 100644 --- a/icuSources/data/lang/en.txt +++ b/icuSources/data/lang/en.txt @@ -1106,6 +1106,7 @@ en{ java{"Javanese Digits"} jpan{"Japanese Numerals"} jpanfin{"Japanese Financial Numerals"} + jpanyear{"Japanese Calendar Gannen Year Numerals"} kali{"Kayah Li Digits"} khmr{"Khmer Digits"} knda{"Kannada Digits"} @@ -1236,7 +1237,7 @@ en{ VALENCIA{"Valencian"} WADEGILE{"Wade-Giles Romanization"} } - Version{"2.1.41.97"} + Version{"2.1.41.98"} characterLabelPattern{ all{"{0} — all"} category-list{"{0}: {1}"} diff --git a/icuSources/data/locales/ar.txt b/icuSources/data/locales/ar.txt index 376113d5..4a0848ee 100644 --- a/icuSources/data/locales/ar.txt +++ b/icuSources/data/locales/ar.txt @@ -1711,6 +1711,7 @@ ar{ "تيشو", "شووا", "هيسي", + "ريوا", } } } diff --git a/icuSources/data/locales/ast.txt b/icuSources/data/locales/ast.txt index c2f8950a..fa381ed4 100644 --- a/icuSources/data/locales/ast.txt +++ b/icuSources/data/locales/ast.txt @@ -2304,6 +2304,7 @@ ast{ "Taishō", "e. Shōwa", "Heisei", + "Reiwa", } narrow{ "Taika", @@ -2542,6 +2543,7 @@ ast{ "T", "S", "H", + "R", } wide{ "Taika (645–650)", @@ -2780,6 +2782,7 @@ ast{ "Taishō", "era Shōwa", "Heisei", + "Reiwa", } } intervalFormats{ diff --git a/icuSources/data/locales/br.txt b/icuSources/data/locales/br.txt index 41100c2d..1203f5f3 100644 --- a/icuSources/data/locales/br.txt +++ b/icuSources/data/locales/br.txt @@ -4105,6 +4105,7 @@ br{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } narrow{ "Taika (645–650)", @@ -4343,6 +4344,7 @@ br{ "T", "S", "H", + "R", } wide{ "Taika (645–650)", @@ -4581,6 +4583,7 @@ br{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } } intervalFormats{ diff --git a/icuSources/data/locales/bs_Cyrl.txt b/icuSources/data/locales/bs_Cyrl.txt index dca25e65..857ec811 100644 --- a/icuSources/data/locales/bs_Cyrl.txt +++ b/icuSources/data/locales/bs_Cyrl.txt @@ -1035,6 +1035,7 @@ bs_Cyrl{ "Таишо", "Шова", "Хаисеи", + "Reiwa", } } } diff --git a/icuSources/data/locales/cs.txt b/icuSources/data/locales/cs.txt index d4a5ea5c..6fe80a2e 100644 --- a/icuSources/data/locales/cs.txt +++ b/icuSources/data/locales/cs.txt @@ -3551,6 +3551,7 @@ cs{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } narrow{ "Taika (645–650)", @@ -3789,6 +3790,7 @@ cs{ "T", "S", "H", + "R", } wide{ "Taika (645–650)", @@ -4027,6 +4029,7 @@ cs{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } } intervalFormats{ diff --git a/icuSources/data/locales/de.txt b/icuSources/data/locales/de.txt index 79041925..ec63cce3 100644 --- a/icuSources/data/locales/de.txt +++ b/icuSources/data/locales/de.txt @@ -1657,6 +1657,7 @@ de{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } } } diff --git a/icuSources/data/locales/el.txt b/icuSources/data/locales/el.txt index b8f73de1..f18aa9b1 100644 --- a/icuSources/data/locales/el.txt +++ b/icuSources/data/locales/el.txt @@ -1411,6 +1411,247 @@ el{ yMd{"dd/MM/y GGGGG"} yQQQ{"y GGGGG QQQ"} } + eras{ + abbreviated{ + "Taika (645–650)", + "Hakuchi (650–671)", + "Hakuhō (672–686)", + "Shuchō (686–701)", + "Taihō (701–704)", + "Keiun (704–708)", + "Wadō (708–715)", + "Reiki (715–717)", + "Yōrō (717–724)", + "Jinki (724–729)", + "Tenpyō (729–749)", + "Tenpyō-kampō (749–749)", + "Tenpyō-shōhō (749–757)", + "Tenpyō-hōji (757–765)", + "Tenpyō-jingo (765–767)", + "Jingo-keiun (767–770)", + "Hōki (770–780)", + "Ten-ō (781–782)", + "Enryaku (782–806)", + "Daidō (806–810)", + "Kōnin (810–824)", + "Tenchō (824–834)", + "Jōwa (834–848)", + "Kajō (848–851)", + "Ninju (851–854)", + "Saikō (854–857)", + "Ten-an (857–859)", + "Jōgan (859–877)", + "Gangyō (877–885)", + "Ninna (885–889)", + "Kanpyō (889–898)", + "Shōtai (898–901)", + "Engi (901–923)", + "Enchō (923–931)", + "Jōhei (931–938)", + "Tengyō (938–947)", + "Tenryaku (947–957)", + "Tentoku (957–961)", + "Ōwa (961–964)", + "Kōhō (964–968)", + "Anna (968–970)", + "Tenroku (970–973)", + "Ten’en (973–976)", + "Jōgen (976–978)", + "Tengen (978–983)", + "Eikan (983–985)", + "Kanna (985–987)", + "Eien (987–989)", + "Eiso (989–990)", + "Shōryaku (990–995)", + "Chōtoku (995–999)", + "Chōhō (999–1004)", + "Kankō (1004–1012)", + "Chōwa (1012–1017)", + "Kannin (1017–1021)", + "Jian (1021–1024)", + "Manju (1024–1028)", + "Chōgen (1028–1037)", + "Chōryaku (1037–1040)", + "Chōkyū (1040–1044)", + "Kantoku (1044–1046)", + "Eishō (1046–1053)", + "Tengi (1053–1058)", + "Kōhei (1058–1065)", + "Jiryaku (1065–1069)", + "Enkyū (1069–1074)", + "Shōho (1074–1077)", + "Shōryaku (1077–1081)", + "Eihō (1081–1084)", + "Ōtoku (1084–1087)", + "Kanji (1087–1094)", + "Kahō (1094–1096)", + "Eichō (1096–1097)", + "Jōtoku (1097–1099)", + "Kōwa (1099–1104)", + "Chōji (1104–1106)", + "Kashō (1106–1108)", + "Tennin (1108–1110)", + "Ten-ei (1110–1113)", + "Eikyū (1113–1118)", + "Gen’ei (1118–1120)", + "Hōan (1120–1124)", + "Tenji (1124–1126)", + "Daiji (1126–1131)", + "Tenshō (1131–1132)", + "Chōshō (1132–1135)", + "Hōen (1135–1141)", + "Eiji (1141–1142)", + "Kōji (1142–1144)", + "Ten’yō (1144–1145)", + "Kyūan (1145–1151)", + "Ninpei (1151–1154)", + "Kyūju (1154–1156)", + "Hōgen (1156–1159)", + "Heiji (1159–1160)", + "Eiryaku (1160–1161)", + "Ōho (1161–1163)", + "Chōkan (1163–1165)", + "Eiman (1165–1166)", + "Nin’an (1166–1169)", + "Kaō (1169–1171)", + "Shōan (1171–1175)", + "Angen (1175–1177)", + "Jishō (1177–1181)", + "Yōwa (1181–1182)", + "Juei (1182–1184)", + "Genryaku (1184–1185)", + "Bunji (1185–1190)", + "Kenkyū (1190–1199)", + "Shōji (1199–1201)", + "Kennin (1201–1204)", + "Genkyū (1204–1206)", + "Ken’ei (1206–1207)", + "Jōgen (1207–1211)", + "Kenryaku (1211–1213)", + "Kenpō (1213–1219)", + "Jōkyū (1219–1222)", + "Jōō (1222–1224)", + "Gennin (1224–1225)", + "Karoku (1225–1227)", + "Antei (1227–1229)", + "Kanki (1229–1232)", + "Jōei (1232–1233)", + "Tenpuku (1233–1234)", + "Bunryaku (1234–1235)", + "Katei (1235–1238)", + "Ryakunin (1238–1239)", + "En’ō (1239–1240)", + "Ninji (1240–1243)", + "Kangen (1243–1247)", + "Hōji (1247–1249)", + "Kenchō (1249–1256)", + "Kōgen (1256–1257)", + "Shōka (1257–1259)", + "Shōgen (1259–1260)", + "Bun’ō (1260–1261)", + "Kōchō (1261–1264)", + "Bun’ei (1264–1275)", + "Kenji (1275–1278)", + "Kōan (1278–1288)", + "Shōō (1288–1293)", + "Einin (1293–1299)", + "Shōan (1299–1302)", + "Kengen (1302–1303)", + "Kagen (1303–1306)", + "Tokuji (1306–1308)", + "Enkyō (1308–1311)", + "Ōchō (1311–1312)", + "Shōwa (1312–1317)", + "Bunpō (1317–1319)", + "Genō (1319–1321)", + "Genkō (1321–1324)", + "Shōchū (1324–1326)", + "Karyaku (1326–1329)", + "Gentoku (1329–1331)", + "Genkō (1331–1334)", + "Kenmu (1334–1336)", + "Engen (1336–1340)", + "Kōkoku (1340–1346)", + "Shōhei (1346–1370)", + "Kentoku (1370–1372)", + "Bunchū (1372–1375)", + "Tenju (1375–1379)", + "Kōryaku (1379–1381)", + "Kōwa (1381–1384)", + "Genchū (1384–1392)", + "Meitoku (1384–1387)", + "Kakei (1387–1389)", + "Kōō (1389–1390)", + "Meitoku (1390–1394)", + "Ōei (1394–1428)", + "Shōchō (1428–1429)", + "Eikyō (1429–1441)", + "Kakitsu (1441–1444)", + "Bun’an (1444–1449)", + "Hōtoku (1449–1452)", + "Kyōtoku (1452–1455)", + "Kōshō (1455–1457)", + "Chōroku (1457–1460)", + "Kanshō (1460–1466)", + "Bunshō (1466–1467)", + "Ōnin (1467–1469)", + "Bunmei (1469–1487)", + "Chōkyō (1487–1489)", + "Entoku (1489–1492)", + "Meiō (1492–1501)", + "Bunki (1501–1504)", + "Eishō (1504–1521)", + "Taiei (1521–1528)", + "Kyōroku (1528–1532)", + "Tenbun (1532–1555)", + "Kōji (1555–1558)", + "Eiroku (1558–1570)", + "Genki (1570–1573)", + "Tenshō (1573–1592)", + "Bunroku (1592–1596)", + "Keichō (1596–1615)", + "Genna (1615–1624)", + "Kan’ei (1624–1644)", + "Shōho (1644–1648)", + "Keian (1648–1652)", + "Jōō (1652–1655)", + "Meireki (1655–1658)", + "Manji (1658–1661)", + "Kanbun (1661–1673)", + "Enpō (1673–1681)", + "Tenna (1681–1684)", + "Jōkyō (1684–1688)", + "Genroku (1688–1704)", + "Hōei (1704–1711)", + "Shōtoku (1711–1716)", + "Kyōhō (1716–1736)", + "Genbun (1736–1741)", + "Kanpō (1741–1744)", + "Enkyō (1744–1748)", + "Kan’en (1748–1751)", + "Hōreki (1751–1764)", + "Meiwa (1764–1772)", + "An’ei (1772–1781)", + "Tenmei (1781–1789)", + "Kansei (1789–1801)", + "Kyōwa (1801–1804)", + "Bunka (1804–1818)", + "Bunsei (1818–1830)", + "Tenpō (1830–1844)", + "Kōka (1844–1848)", + "Kaei (1848–1854)", + "Ansei (1854–1860)", + "Man’en (1860–1861)", + "Bunkyū (1861–1864)", + "Genji (1864–1865)", + "Keiō (1865–1868)", + "Meiji", + "Taishō", + "Shōwa", + "Χεϊσέι", + "Ρέιβα", + } + } } persian{ eras{ diff --git a/icuSources/data/locales/en.txt b/icuSources/data/locales/en.txt index d787a379..407f71ac 100644 --- a/icuSources/data/locales/en.txt +++ b/icuSources/data/locales/en.txt @@ -205,7 +205,7 @@ en{ } } } - Version{"2.1.41.97"} + Version{"2.1.41.98"} calendar{ buddhist{ eras{ @@ -499,6 +499,44 @@ en{ yyyyQQQQ{"QQQQ y G"} } intervalFormats{ + Gy{ + G{"y G – y G"} + y{"y – y G"} + } + GyM{ + G{"M/y GGGGG – M/y GGGGG"} + M{"M/y – M/y GGGGG"} + y{"M/y – M/y GGGGG"} + } + GyMEd{ + G{"E, M/d/y GGGGG – E, M/d/y GGGGG"} + M{"E, M/d/y – E, M/d/y GGGGG"} + d{"E, M/d/y – E, M/d/y GGGGG"} + y{"E, M/d/y – E, M/d/y GGGGG"} + } + GyMMM{ + G{"MMM y G – MMM y G"} + M{"MMM – MMM y G"} + y{"MMM y – MMM y G"} + } + GyMMMEd{ + G{"E, MMM d, y G – E, MMM d, y G"} + M{"E, MMM d – E, MMM d, y G"} + d{"E, MMM d – E, MMM d, y G"} + y{"E, MMM d, y – E, MMM d, y G"} + } + GyMMMd{ + G{"MMM d, y G – MMM d, y G"} + M{"MMM d – MMM d, y G"} + d{"MMM d – d, y G"} + y{"MMM d, y – MMM d, y G"} + } + GyMd{ + G{"M/d/y GGGGG – M/d/y GGGGG"} + M{"M/d/y – M/d/y GGGGG"} + d{"M/d/y – M/d/y GGGGG"} + y{"M/d/y – M/d/y GGGGG"} + } H{ H{"HH – HH"} } @@ -812,6 +850,44 @@ en{ } } intervalFormats{ + Gy{ + G{"y G – y G"} + y{"y – y G"} + } + GyM{ + G{"M/y GGGGG – M/y GGGGG"} + M{"M/y – M/y GGGGG"} + y{"M/y – M/y GGGGG"} + } + GyMEd{ + G{"E, M/d/y GGGGG – E, M/d/y GGGGG"} + M{"E, M/d/y – E, M/d/y GGGGG"} + d{"E, M/d/y – E, M/d/y GGGGG"} + y{"E, M/d/y – E, M/d/y GGGGG"} + } + GyMMM{ + G{"MMM y G – MMM y G"} + M{"MMM – MMM y G"} + y{"MMM y – MMM y G"} + } + GyMMMEd{ + G{"E, MMM d, y G – E, MMM d, y G"} + M{"E, MMM d – E, MMM d, y G"} + d{"E, MMM d – E, MMM d, y G"} + y{"E, MMM d, y – E, MMM d, y G"} + } + GyMMMd{ + G{"MMM d, y G – MMM d, y G"} + M{"MMM d – MMM d, y G"} + d{"MMM d – d, y G"} + y{"MMM d, y – MMM d, y G"} + } + GyMd{ + G{"M/d/y GGGGG – M/d/y GGGGG"} + M{"M/d/y – M/d/y GGGGG"} + d{"M/d/y – M/d/y GGGGG"} + y{"M/d/y – M/d/y GGGGG"} + } H{ H{"HH – HH"} } diff --git a/icuSources/data/locales/fa.txt b/icuSources/data/locales/fa.txt index 3b1587b1..14c45255 100644 --- a/icuSources/data/locales/fa.txt +++ b/icuSources/data/locales/fa.txt @@ -1450,6 +1450,249 @@ fa{ } } } + japanese{ + eras{ + abbreviated{ + "Taika (645–650)", + "Hakuchi (650–671)", + "Hakuhō (672–686)", + "Shuchō (686–701)", + "Taihō (701–704)", + "Keiun (704–708)", + "Wadō (708–715)", + "Reiki (715–717)", + "Yōrō (717–724)", + "Jinki (724–729)", + "Tenpyō (729–749)", + "Tenpyō-kampō (749–749)", + "Tenpyō-shōhō (749–757)", + "Tenpyō-hōji (757–765)", + "Tenpyō-jingo (765–767)", + "Jingo-keiun (767–770)", + "Hōki (770–780)", + "Ten-ō (781–782)", + "Enryaku (782–806)", + "Daidō (806–810)", + "Kōnin (810–824)", + "Tenchō (824–834)", + "Jōwa (834–848)", + "Kajō (848–851)", + "Ninju (851–854)", + "Saikō (854–857)", + "Ten-an (857–859)", + "Jōgan (859–877)", + "Gangyō (877–885)", + "Ninna (885–889)", + "Kanpyō (889–898)", + "Shōtai (898–901)", + "Engi (901–923)", + "Enchō (923–931)", + "Jōhei (931–938)", + "Tengyō (938–947)", + "Tenryaku (947–957)", + "Tentoku (957–961)", + "Ōwa (961–964)", + "Kōhō (964–968)", + "Anna (968–970)", + "Tenroku (970–973)", + "Ten’en (973–976)", + "Jōgen (976–978)", + "Tengen (978–983)", + "Eikan (983–985)", + "Kanna (985–987)", + "Eien (987–989)", + "Eiso (989–990)", + "Shōryaku (990–995)", + "Chōtoku (995–999)", + "Chōhō (999–1004)", + "Kankō (1004–1012)", + "Chōwa (1012–1017)", + "Kannin (1017–1021)", + "Jian (1021–1024)", + "Manju (1024–1028)", + "Chōgen (1028–1037)", + "Chōryaku (1037–1040)", + "Chōkyū (1040–1044)", + "Kantoku (1044–1046)", + "Eishō (1046–1053)", + "Tengi (1053–1058)", + "Kōhei (1058–1065)", + "Jiryaku (1065–1069)", + "Enkyū (1069–1074)", + "Shōho (1074–1077)", + "Shōryaku (1077–1081)", + "Eihō (1081–1084)", + "Ōtoku (1084–1087)", + "Kanji (1087–1094)", + "Kahō (1094–1096)", + "Eichō (1096–1097)", + "Jōtoku (1097–1099)", + "Kōwa (1099–1104)", + "Chōji (1104–1106)", + "Kashō (1106–1108)", + "Tennin (1108–1110)", + "Ten-ei (1110–1113)", + "Eikyū (1113–1118)", + "Gen’ei (1118–1120)", + "Hōan (1120–1124)", + "Tenji (1124–1126)", + "Daiji (1126–1131)", + "Tenshō (1131–1132)", + "Chōshō (1132–1135)", + "Hōen (1135–1141)", + "Eiji (1141–1142)", + "Kōji (1142–1144)", + "Ten’yō (1144–1145)", + "Kyūan (1145–1151)", + "Ninpei (1151–1154)", + "Kyūju (1154–1156)", + "Hōgen (1156–1159)", + "Heiji (1159–1160)", + "Eiryaku (1160–1161)", + "Ōho (1161–1163)", + "Chōkan (1163–1165)", + "Eiman (1165–1166)", + "Nin’an (1166–1169)", + "Kaō (1169–1171)", + "Shōan (1171–1175)", + "Angen (1175–1177)", + "Jishō (1177–1181)", + "Yōwa (1181–1182)", + "Juei (1182–1184)", + "Genryaku (1184–1185)", + "Bunji (1185–1190)", + "Kenkyū (1190–1199)", + "Shōji (1199–1201)", + "Kennin (1201–1204)", + "Genkyū (1204–1206)", + "Ken’ei (1206–1207)", + "Jōgen (1207–1211)", + "Kenryaku (1211–1213)", + "Kenpō (1213–1219)", + "Jōkyū (1219–1222)", + "Jōō (1222–1224)", + "Gennin (1224–1225)", + "Karoku (1225–1227)", + "Antei (1227–1229)", + "Kanki (1229–1232)", + "Jōei (1232–1233)", + "Tenpuku (1233–1234)", + "Bunryaku (1234–1235)", + "Katei (1235–1238)", + "Ryakunin (1238–1239)", + "En’ō (1239–1240)", + "Ninji (1240–1243)", + "Kangen (1243–1247)", + "Hōji (1247–1249)", + "Kenchō (1249–1256)", + "Kōgen (1256–1257)", + "Shōka (1257–1259)", + "Shōgen (1259–1260)", + "Bun’ō (1260–1261)", + "Kōchō (1261–1264)", + "Bun’ei (1264–1275)", + "Kenji (1275–1278)", + "Kōan (1278–1288)", + "Shōō (1288–1293)", + "Einin (1293–1299)", + "Shōan (1299–1302)", + "Kengen (1302–1303)", + "Kagen (1303–1306)", + "Tokuji (1306–1308)", + "Enkyō (1308–1311)", + "Ōchō (1311–1312)", + "Shōwa (1312–1317)", + "Bunpō (1317–1319)", + "Genō (1319–1321)", + "Genkō (1321–1324)", + "Shōchū (1324–1326)", + "Karyaku (1326–1329)", + "Gentoku (1329–1331)", + "Genkō (1331–1334)", + "Kenmu (1334–1336)", + "Engen (1336–1340)", + "Kōkoku (1340–1346)", + "Shōhei (1346–1370)", + "Kentoku (1370–1372)", + "Bunchū (1372–1375)", + "Tenju (1375–1379)", + "Kōryaku (1379–1381)", + "Kōwa (1381–1384)", + "Genchū (1384–1392)", + "Meitoku (1384–1387)", + "Kakei (1387–1389)", + "Kōō (1389–1390)", + "Meitoku (1390–1394)", + "Ōei (1394–1428)", + "Shōchō (1428–1429)", + "Eikyō (1429–1441)", + "Kakitsu (1441–1444)", + "Bun’an (1444–1449)", + "Hōtoku (1449–1452)", + "Kyōtoku (1452–1455)", + "Kōshō (1455–1457)", + "Chōroku (1457–1460)", + "Kanshō (1460–1466)", + "Bunshō (1466–1467)", + "Ōnin (1467–1469)", + "Bunmei (1469–1487)", + "Chōkyō (1487–1489)", + "Entoku (1489–1492)", + "Meiō (1492–1501)", + "Bunki (1501–1504)", + "Eishō (1504–1521)", + "Taiei (1521–1528)", + "Kyōroku (1528–1532)", + "Tenbun (1532–1555)", + "Kōji (1555–1558)", + "Eiroku (1558–1570)", + "Genki (1570–1573)", + "Tenshō (1573–1592)", + "Bunroku (1592–1596)", + "Keichō (1596–1615)", + "Genna (1615–1624)", + "Kan’ei (1624–1644)", + "Shōho (1644–1648)", + "Keian (1648–1652)", + "Jōō (1652–1655)", + "Meireki (1655–1658)", + "Manji (1658–1661)", + "Kanbun (1661–1673)", + "Enpō (1673–1681)", + "Tenna (1681–1684)", + "Jōkyō (1684–1688)", + "Genroku (1688–1704)", + "Hōei (1704–1711)", + "Shōtoku (1711–1716)", + "Kyōhō (1716–1736)", + "Genbun (1736–1741)", + "Kanpō (1741–1744)", + "Enkyō (1744–1748)", + "Kan’en (1748–1751)", + "Hōreki (1751–1764)", + "Meiwa (1764–1772)", + "An’ei (1772–1781)", + "Tenmei (1781–1789)", + "Kansei (1789–1801)", + "Kyōwa (1801–1804)", + "Bunka (1804–1818)", + "Bunsei (1818–1830)", + "Tenpō (1830–1844)", + "Kōka (1844–1848)", + "Kaei (1848–1854)", + "Ansei (1854–1860)", + "Man’en (1860–1861)", + "Bunkyū (1861–1864)", + "Genji (1864–1865)", + "Keiō (1865–1868)", + "Meiji", + "Taishō", + "Shōwa", + "هیسه‌ای", + "ریوا", + } + } + } persian{ DateTimePatterns{ "H:mm:ss (zzzz)", diff --git a/icuSources/data/locales/he.txt b/icuSources/data/locales/he.txt index a431a70f..2f1cb087 100644 --- a/icuSources/data/locales/he.txt +++ b/icuSources/data/locales/he.txt @@ -1837,6 +1837,7 @@ he{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } } } diff --git a/icuSources/data/locales/hi.txt b/icuSources/data/locales/hi.txt index fbb0a0ab..54f922b8 100644 --- a/icuSources/data/locales/hi.txt +++ b/icuSources/data/locales/hi.txt @@ -1260,7 +1260,8 @@ hi{ "मेजी", "ताईशो", "शोवा", - "हेईसेई", + "हेइसेइ", + "रेइवा", } } } diff --git a/icuSources/data/locales/hr.txt b/icuSources/data/locales/hr.txt index 5608a853..af61fa4d 100644 --- a/icuSources/data/locales/hr.txt +++ b/icuSources/data/locales/hr.txt @@ -1604,6 +1604,7 @@ hr{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } } } diff --git a/icuSources/data/locales/id.txt b/icuSources/data/locales/id.txt index 704d31b0..7c686dfb 100644 --- a/icuSources/data/locales/id.txt +++ b/icuSources/data/locales/id.txt @@ -2189,6 +2189,7 @@ id{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } } } diff --git a/icuSources/data/locales/ja.txt b/icuSources/data/locales/ja.txt index 6853f175..8143ae33 100644 --- a/icuSources/data/locales/ja.txt +++ b/icuSources/data/locales/ja.txt @@ -233,7 +233,7 @@ ja{ native{"latn"} traditional{"jpan"} } - Version{"2.1.41.97"} + Version{"2.1.41.98"} calendar{ buddhist{ DateTimePatterns{ @@ -1168,8 +1168,8 @@ ja{ "H:mm", "Gy年M月d日(EEEE)", "Gy年M月d日", - "Gy/MM/dd", - "Gy/MM/dd", + "GGGGGy/MM/dd", + "GGGGGy/MM/dd", "{1} {0}", "{1} {0}", "{1} {0}", @@ -1213,19 +1213,74 @@ ja{ ms{"mm:ss"} y{"Gy年"} yyyy{"Gy年"} - yyyyM{"Gy/M"} - yyyyMEEEEd{"Gy/M/d(EEEE)"} - yyyyMEd{"Gy/M/d(E)"} + yyyyM{"GGGGGy/M"} + yyyyMEEEEd{"GGGGGy/M/d(EEEE)"} + yyyyMEd{"GGGGGy/M/d(E)"} yyyyMMM{"Gy年M月"} yyyyMMMEEEEd{"Gy年M月d日(EEEE)"} yyyyMMMEd{"Gy年M月d日(E)"} yyyyMMMM{"Gy年M月"} yyyyMMMd{"Gy年M月d日"} - yyyyMd{"Gy/M/d"} + yyyyMd{"GGGGGy/M/d"} yyyyQQQ{"Gy/QQQ"} yyyyQQQQ{"Gy年QQQQ"} } intervalFormats{ + GGGGGyM{ + G{"GGGGGy/MM~GGGGGy/MM"} + M{"GGGGGy/MM~y/MM"} + y{"GGGGGy/MM~y/MM"} + } + GGGGGyMEd{ + G{"GGGGGy/MM/dd(E)~GGGGGy/MM/dd(E)"} + M{"GGGGGy/MM/dd(E)~y/MM/dd(E)"} + d{"GGGGGy/MM/dd(E)~y/MM/dd(E)"} + y{"GGGGGy/MM/dd(E)~y/MM/dd(E)"} + } + GGGGGyMd{ + G{"GGGGGy/MM/dd~GGGGGy/MM/dd"} + M{"GGGGGy/MM/dd~y/MM/dd"} + d{"GGGGGy/MM/dd~y/MM/dd"} + y{"GGGGGy/MM/dd~y/MM/dd"} + } + Gy{ + G{"Gy年~Gy年"} + y{"Gy年~y年"} + } + GyM{ + G{"GGGGGy/MM~GGGGGy/MM"} + M{"GGGGGy/MM~y/MM"} + y{"GGGGGy/MM~y/MM"} + } + GyMEd{ + G{"GGGGGy/MM/dd(E)~GGGGGy/MM/dd(E)"} + M{"GGGGGy/MM/dd(E)~y/MM/dd(E)"} + d{"GGGGGy/MM/dd(E)~y/MM/dd(E)"} + y{"GGGGGy/MM/dd(E)~y/MM/dd(E)"} + } + GyMMM{ + G{"Gy年M月~Gy年M月"} + M{"Gy年M月~M月"} + y{"Gy年M月~y年M月"} + } + GyMMMEd{ + G{"Gy年M月d日(E)~Gy年M月d日(E)"} + M{"Gy年M月d日(E)~M月d日(E)"} + d{"Gy年M月d日(E)~d日(E)"} + y{"Gy年M月d日(E)~y年M月d日(E)"} + } + GyMMMd{ + G{"Gy年M月d日~Gy年M月d日"} + M{"Gy年M月d日~M月d日"} + d{"Gy年M月d日~d日"} + y{"Gy年M月d日~y年M月d日"} + } + GyMd{ + G{"GGGGGy/MM/dd~GGGGGy/MM/dd"} + M{"GGGGGy/MM/dd~y/MM/dd"} + d{"GGGGGy/MM/dd~y/MM/dd"} + y{"GGGGGy/MM/dd~y/MM/dd"} + } H{ H{"H時~H時"} } @@ -1291,13 +1346,13 @@ ja{ y{"Gy年~y年"} } yM{ - M{"Gy/MM~y/MM"} - y{"Gy/MM~y/MM"} + M{"GGGGGy/MM~y/MM"} + y{"GGGGGy/MM~y/MM"} } yMEd{ - M{"Gy/MM/dd(E)~y/MM/dd(E)"} - d{"Gy/MM/dd(E)~y/MM/dd(E)"} - y{"Gy/MM/dd(E)~y/MM/dd(E)"} + M{"GGGGGy/MM/dd(E)~y/MM/dd(E)"} + d{"GGGGGy/MM/dd(E)~y/MM/dd(E)"} + y{"GGGGGy/MM/dd(E)~y/MM/dd(E)"} } yMMM{ M{"Gy年M月~M月"} @@ -1318,9 +1373,9 @@ ja{ y{"Gy年M月d日~y年M月d日"} } yMd{ - M{"Gy/MM/dd~y/MM/dd"} - d{"Gy/MM/dd~y/MM/dd"} - y{"Gy/MM/dd~y/MM/dd"} + M{"GGGGGy/MM/dd~y/MM/dd"} + d{"GGGGGy/MM/dd~y/MM/dd"} + y{"GGGGGy/MM/dd~y/MM/dd"} } } } @@ -1585,6 +1640,44 @@ ja{ } } intervalFormats{ + Gy{ + G{"Gy年~Gy年"} + y{"Gy年~y年"} + } + GyM{ + G{"Gy/MM~Gy/MM"} + M{"Gy/MM~y/MM"} + y{"Gy/MM~y/MM"} + } + GyMEd{ + G{"Gy/MM/dd(E)~Gy/MM/dd(E)"} + M{"Gy/MM/dd(E)~y/MM/dd(E)"} + d{"Gy/MM/dd(E)~y/MM/dd(E)"} + y{"Gy/MM/dd(E)~y/MM/dd(E)"} + } + GyMMM{ + G{"Gy年M月~Gy年M月"} + M{"Gy年M月~M月"} + y{"Gy年M月~y年M月"} + } + GyMMMEd{ + G{"Gy年M月d日(E)~Gy年M月d日(E)"} + M{"Gy年M月d日(E)~M月d日(E)"} + d{"Gy年M月d日(E)~d日(E)"} + y{"Gy年M月d日(E)~y年M月d日(E)"} + } + GyMMMd{ + G{"Gy年M月d日~Gy年M月d日"} + M{"Gy年M月d日~M月d日"} + d{"Gy年M月d日~d日"} + y{"Gy年M月d日~y年M月d日"} + } + GyMd{ + G{"Gy/MM/dd~Gy/MM/dd"} + M{"Gy/MM/dd~y/MM/dd"} + d{"Gy/MM/dd~y/MM/dd"} + y{"Gy/MM/dd~y/MM/dd"} + } H{ H{"H時~H時"} } @@ -2172,10 +2265,16 @@ ja{ "H:mm:ss z", "H:mm:ss", "H:mm", - "Gy年M月d日 EEEE", - "Gy年M月d日", - "GGGGGyy/MM/dd", - "GGGGGyy/MM/dd", + { + "Gy年M月d日 EEEE", + "y=jpanyear", + } + { + "Gy年M月d日", + "y=jpanyear", + } + "GGGGGy/MM/dd", + "GGGGGy/MM/dd", "{1} {0}", "{1} {0}", "{1} {0}", @@ -2190,6 +2289,9 @@ ja{ Ed{"d日(E)"} Ehm{"E aK:mm"} Ehms{"E aK:mm:ss"} + GGGGGyM{"GGGGGy/MM"} + GGGGGyMEd{"GGGGGy/MM/dd(E)"} + GGGGGyMd{"GGGGGy/MM/dd"} Gy{"Gy年"} GyMMM{"Gy年M月"} GyMMMEEEEd{"Gy年M月d日 EEEE"} @@ -2214,16 +2316,16 @@ ja{ ms{"mm:ss"} y{"Gy年"} yyyy{"Gy年"} - yyyyM{"GGGGGyy/M"} - yyyyMEEEEd{"GGGGGyy/M/dEEEE"} - yyyyMEd{"GGGGGyy/M/d(E)"} - yyyyMM{"GGGGGyy/MM"} + yyyyM{"GGGGGy/M"} + yyyyMEEEEd{"GGGGGy/M/dEEEE"} + yyyyMEd{"GGGGGy/M/d(E)"} + yyyyMM{"GGGGGy/MM"} yyyyMMM{"Gy年M月"} yyyyMMMEEEEd{"Gy年M月d日 EEEE"} yyyyMMMEd{"Gy年M月d日(E)"} yyyyMMMM{"Gy年M月"} yyyyMMMd{"Gy年M月d日"} - yyyyMd{"GGGGGyy/M/d"} + yyyyMd{"GGGGGy/M/d"} yyyyQQQ{"Gy/QQQ"} yyyyQQQQ{"Gy年QQQQ"} } @@ -2465,6 +2567,7 @@ ja{ "大正", "昭和", "平成", + "令和", } narrow{ "大化", @@ -2703,6 +2806,7 @@ ja{ "T", "S", "H", + "R", } } } diff --git a/icuSources/data/locales/ko.txt b/icuSources/data/locales/ko.txt index babff138..0035ba53 100644 --- a/icuSources/data/locales/ko.txt +++ b/icuSources/data/locales/ko.txt @@ -1909,6 +1909,7 @@ ko{ "다이쇼", "쇼와", "헤이세이", + "레이와", } } } diff --git a/icuSources/data/locales/lo.txt b/icuSources/data/locales/lo.txt index 6f40fbee..f3b1732d 100644 --- a/icuSources/data/locales/lo.txt +++ b/icuSources/data/locales/lo.txt @@ -1845,6 +1845,7 @@ lo{ "ໄຕໂຊ", "ໂຊວາ", "ຮີຊີ", + "Reiwa", } } } diff --git a/icuSources/data/locales/lt.txt b/icuSources/data/locales/lt.txt index 457dc018..2a3e57c1 100644 --- a/icuSources/data/locales/lt.txt +++ b/icuSources/data/locales/lt.txt @@ -2466,6 +2466,7 @@ lt{ "Taišo", "Šova", "Heisei", + "Reiwa", } } } diff --git a/icuSources/data/locales/nb.txt b/icuSources/data/locales/nb.txt index 121d8ae9..04e3d21a 100644 --- a/icuSources/data/locales/nb.txt +++ b/icuSources/data/locales/nb.txt @@ -5364,6 +5364,7 @@ nb{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } narrow{ "Taika (645–650)", @@ -5602,6 +5603,7 @@ nb{ "T", "S", "H", + "R", } wide{ "Taika (645–650)", @@ -5840,6 +5842,7 @@ nb{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } } intervalFormats{ diff --git a/icuSources/data/locales/nl.txt b/icuSources/data/locales/nl.txt index ab20bdc4..bd0478a7 100644 --- a/icuSources/data/locales/nl.txt +++ b/icuSources/data/locales/nl.txt @@ -4853,6 +4853,7 @@ nl{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } narrow{ "Taika (645–650)", @@ -5091,6 +5092,7 @@ nl{ "T", "S", "H", + "R", } wide{ "Taika (645–650)", @@ -5329,6 +5331,7 @@ nl{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } } } diff --git a/icuSources/data/locales/root.txt b/icuSources/data/locales/root.txt index 343bd4cd..5f1d859f 100644 --- a/icuSources/data/locales/root.txt +++ b/icuSources/data/locales/root.txt @@ -172,7 +172,7 @@ root{ minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.41.58"} + Version{"2.1.41.59"} calendar{ buddhist{ AmPmMarkers:alias{"/LOCALE/calendar/gregorian/AmPmMarkers"} @@ -807,6 +807,44 @@ root{ wide:alias{"/LOCALE/calendar/generic/eras/abbreviated"} } intervalFormats{ + Gy{ + G{"G y – G y"} + y{"G y–y"} + } + GyM{ + G{"GGGGG y-MM – GGGGG y-MM"} + M{"GGGGG y-MM – y-MM"} + y{"GGGGG y-MM – y-MM"} + } + GyMEd{ + G{"GGGGG y-MM-dd, E – GGGGG y-MM-dd, E"} + M{"GGGGG y-MM-dd, E – y-MM-dd, E"} + d{"GGGGG y-MM-dd, E – y-MM-dd, E"} + y{"GGGGG y-MM-dd, E – y-MM-dd, E"} + } + GyMMM{ + G{"G y MMM – G y MMM"} + M{"G y MMM–MMM"} + y{"G y MMM – y MMM"} + } + GyMMMEd{ + G{"G y MMM d, E – G y MMM d, E"} + M{"G y MMM d, E – MMM d, E"} + d{"G y MMM d, E – MMM d, E"} + y{"G y MMM d, E – y MMM d, E"} + } + GyMMMd{ + G{"G y MMM d – G y MMM d"} + M{"G y MMM d – MMM d"} + d{"G y MMM d–d"} + y{"G y MMM d – y MMM d"} + } + GyMd{ + G{"GGGGG y-MM-dd – GGGGG y-MM-dd"} + M{"GGGGG y-MM-dd – y-MM-dd"} + d{"GGGGG y-MM-dd – y-MM-dd"} + y{"GGGGG y-MM-dd – y-MM-dd"} + } H{ H{"HH–HH"} } @@ -1067,6 +1105,44 @@ root{ wide:alias{"/LOCALE/calendar/gregorian/eras/abbreviated"} } intervalFormats{ + Gy{ + G{"G y – G y"} + y{"G y–y"} + } + GyM{ + G{"GGGGG y-MM – GGGGG y-MM"} + M{"GGGGG y-MM – y-MM"} + y{"GGGGG y-MM – y-MM"} + } + GyMEd{ + G{"GGGGG y-MM-dd, E – GGGGG y-MM-dd, E"} + M{"GGGGG y-MM-dd, E – y-MM-dd, E"} + d{"GGGGG y-MM-dd, E – y-MM-dd, E"} + y{"GGGGG y-MM-dd, E – y-MM-dd, E"} + } + GyMMM{ + G{"G y MMM – G y MMM"} + M{"G y MMM–MMM"} + y{"G y MMM – y MMM"} + } + GyMMMEd{ + G{"G y MMM d, E – G y MMM d, E"} + M{"G y MMM d, E – MMM d, E"} + d{"G y MMM d, E – MMM d, E"} + y{"G y MMM d, E – y MMM d, E"} + } + GyMMMd{ + G{"G y MMM d – G y MMM d"} + M{"G y MMM d – MMM d"} + d{"G y MMM d–d"} + y{"G y MMM d – y MMM d"} + } + GyMd{ + G{"GGGGG y-MM-dd – GGGGG y-MM-dd"} + M{"GGGGG y-MM-dd – y-MM-dd"} + d{"GGGGG y-MM-dd – y-MM-dd"} + y{"GGGGG y-MM-dd – y-MM-dd"} + } H{ H{"HH–HH"} } @@ -1713,6 +1789,7 @@ root{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } narrow{ "Taika (645–650)", @@ -1951,6 +2028,7 @@ root{ "T", "S", "H", + "R", } wide:alias{"/LOCALE/calendar/japanese/eras/abbreviated"} } diff --git a/icuSources/data/locales/ru.txt b/icuSources/data/locales/ru.txt index 2be4bcc0..a1005f07 100644 --- a/icuSources/data/locales/ru.txt +++ b/icuSources/data/locales/ru.txt @@ -1837,6 +1837,7 @@ ru{ "Эпоха Тайсьо", "Сьова", "Эпоха Хэйсэй", + "Рэйва", } } } diff --git a/icuSources/data/locales/sr.txt b/icuSources/data/locales/sr.txt index faef61c4..a78f7bc5 100644 --- a/icuSources/data/locales/sr.txt +++ b/icuSources/data/locales/sr.txt @@ -1252,6 +1252,7 @@ sr{ "Таишо", "Шова", "Хаисеи", + "Реива", } } } diff --git a/icuSources/data/locales/sr_Latn.txt b/icuSources/data/locales/sr_Latn.txt index 57ceb03c..5d352389 100644 --- a/icuSources/data/locales/sr_Latn.txt +++ b/icuSources/data/locales/sr_Latn.txt @@ -1257,6 +1257,7 @@ sr_Latn{ "Taišo", "Šova", "Haisei", + "Reiva", } } } diff --git a/icuSources/data/locales/sv.txt b/icuSources/data/locales/sv.txt index 327eea3c..91e80912 100644 --- a/icuSources/data/locales/sv.txt +++ b/icuSources/data/locales/sv.txt @@ -1658,6 +1658,7 @@ sv{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } } } diff --git a/icuSources/data/locales/th.txt b/icuSources/data/locales/th.txt index e55aaf7c..5dc8b3c2 100644 --- a/icuSources/data/locales/th.txt +++ b/icuSources/data/locales/th.txt @@ -2297,6 +2297,7 @@ th{ "ทะอิโช", "โชวะ", "เฮเซ", + "เรวะ", } } } diff --git a/icuSources/data/locales/uk.txt b/icuSources/data/locales/uk.txt index 6470cfad..2bea5a87 100644 --- a/icuSources/data/locales/uk.txt +++ b/icuSources/data/locales/uk.txt @@ -1416,6 +1416,249 @@ uk{ } } } + japanese{ + eras{ + abbreviated{ + "Taika (645–650)", + "Hakuchi (650–671)", + "Hakuhō (672–686)", + "Shuchō (686–701)", + "Taihō (701–704)", + "Keiun (704–708)", + "Wadō (708–715)", + "Reiki (715–717)", + "Yōrō (717–724)", + "Jinki (724–729)", + "Tenpyō (729–749)", + "Tenpyō-kampō (749–749)", + "Tenpyō-shōhō (749–757)", + "Tenpyō-hōji (757–765)", + "Tenpyō-jingo (765–767)", + "Jingo-keiun (767–770)", + "Hōki (770–780)", + "Ten-ō (781–782)", + "Enryaku (782–806)", + "Daidō (806–810)", + "Kōnin (810–824)", + "Tenchō (824–834)", + "Jōwa (834–848)", + "Kajō (848–851)", + "Ninju (851–854)", + "Saikō (854–857)", + "Ten-an (857–859)", + "Jōgan (859–877)", + "Gangyō (877–885)", + "Ninna (885–889)", + "Kanpyō (889–898)", + "Shōtai (898–901)", + "Engi (901–923)", + "Enchō (923–931)", + "Jōhei (931–938)", + "Tengyō (938–947)", + "Tenryaku (947–957)", + "Tentoku (957–961)", + "Ōwa (961–964)", + "Kōhō (964–968)", + "Anna (968–970)", + "Tenroku (970–973)", + "Ten’en (973–976)", + "Jōgen (976–978)", + "Tengen (978–983)", + "Eikan (983–985)", + "Kanna (985–987)", + "Eien (987–989)", + "Eiso (989–990)", + "Shōryaku (990–995)", + "Chōtoku (995–999)", + "Chōhō (999–1004)", + "Kankō (1004–1012)", + "Chōwa (1012–1017)", + "Kannin (1017–1021)", + "Jian (1021–1024)", + "Manju (1024–1028)", + "Chōgen (1028–1037)", + "Chōryaku (1037–1040)", + "Chōkyū (1040–1044)", + "Kantoku (1044–1046)", + "Eishō (1046–1053)", + "Tengi (1053–1058)", + "Kōhei (1058–1065)", + "Jiryaku (1065–1069)", + "Enkyū (1069–1074)", + "Shōho (1074–1077)", + "Shōryaku (1077–1081)", + "Eihō (1081–1084)", + "Ōtoku (1084–1087)", + "Kanji (1087–1094)", + "Kahō (1094–1096)", + "Eichō (1096–1097)", + "Jōtoku (1097–1099)", + "Kōwa (1099–1104)", + "Chōji (1104–1106)", + "Kashō (1106–1108)", + "Tennin (1108–1110)", + "Ten-ei (1110–1113)", + "Eikyū (1113–1118)", + "Gen’ei (1118–1120)", + "Hōan (1120–1124)", + "Tenji (1124–1126)", + "Daiji (1126–1131)", + "Tenshō (1131–1132)", + "Chōshō (1132–1135)", + "Hōen (1135–1141)", + "Eiji (1141–1142)", + "Kōji (1142–1144)", + "Ten’yō (1144–1145)", + "Kyūan (1145–1151)", + "Ninpei (1151–1154)", + "Kyūju (1154–1156)", + "Hōgen (1156–1159)", + "Heiji (1159–1160)", + "Eiryaku (1160–1161)", + "Ōho (1161–1163)", + "Chōkan (1163–1165)", + "Eiman (1165–1166)", + "Nin’an (1166–1169)", + "Kaō (1169–1171)", + "Shōan (1171–1175)", + "Angen (1175–1177)", + "Jishō (1177–1181)", + "Yōwa (1181–1182)", + "Juei (1182–1184)", + "Genryaku (1184–1185)", + "Bunji (1185–1190)", + "Kenkyū (1190–1199)", + "Shōji (1199–1201)", + "Kennin (1201–1204)", + "Genkyū (1204–1206)", + "Ken’ei (1206–1207)", + "Jōgen (1207–1211)", + "Kenryaku (1211–1213)", + "Kenpō (1213–1219)", + "Jōkyū (1219–1222)", + "Jōō (1222–1224)", + "Gennin (1224–1225)", + "Karoku (1225–1227)", + "Antei (1227–1229)", + "Kanki (1229–1232)", + "Jōei (1232–1233)", + "Tenpuku (1233–1234)", + "Bunryaku (1234–1235)", + "Katei (1235–1238)", + "Ryakunin (1238–1239)", + "En’ō (1239–1240)", + "Ninji (1240–1243)", + "Kangen (1243–1247)", + "Hōji (1247–1249)", + "Kenchō (1249–1256)", + "Kōgen (1256–1257)", + "Shōka (1257–1259)", + "Shōgen (1259–1260)", + "Bun’ō (1260–1261)", + "Kōchō (1261–1264)", + "Bun’ei (1264–1275)", + "Kenji (1275–1278)", + "Kōan (1278–1288)", + "Shōō (1288–1293)", + "Einin (1293–1299)", + "Shōan (1299–1302)", + "Kengen (1302–1303)", + "Kagen (1303–1306)", + "Tokuji (1306–1308)", + "Enkyō (1308–1311)", + "Ōchō (1311–1312)", + "Shōwa (1312–1317)", + "Bunpō (1317–1319)", + "Genō (1319–1321)", + "Genkō (1321–1324)", + "Shōchū (1324–1326)", + "Karyaku (1326–1329)", + "Gentoku (1329–1331)", + "Genkō (1331–1334)", + "Kenmu (1334–1336)", + "Engen (1336–1340)", + "Kōkoku (1340–1346)", + "Shōhei (1346–1370)", + "Kentoku (1370–1372)", + "Bunchū (1372–1375)", + "Tenju (1375–1379)", + "Kōryaku (1379–1381)", + "Kōwa (1381–1384)", + "Genchū (1384–1392)", + "Meitoku (1384–1387)", + "Kakei (1387–1389)", + "Kōō (1389–1390)", + "Meitoku (1390–1394)", + "Ōei (1394–1428)", + "Shōchō (1428–1429)", + "Eikyō (1429–1441)", + "Kakitsu (1441–1444)", + "Bun’an (1444–1449)", + "Hōtoku (1449–1452)", + "Kyōtoku (1452–1455)", + "Kōshō (1455–1457)", + "Chōroku (1457–1460)", + "Kanshō (1460–1466)", + "Bunshō (1466–1467)", + "Ōnin (1467–1469)", + "Bunmei (1469–1487)", + "Chōkyō (1487–1489)", + "Entoku (1489–1492)", + "Meiō (1492–1501)", + "Bunki (1501–1504)", + "Eishō (1504–1521)", + "Taiei (1521–1528)", + "Kyōroku (1528–1532)", + "Tenbun (1532–1555)", + "Kōji (1555–1558)", + "Eiroku (1558–1570)", + "Genki (1570–1573)", + "Tenshō (1573–1592)", + "Bunroku (1592–1596)", + "Keichō (1596–1615)", + "Genna (1615–1624)", + "Kan’ei (1624–1644)", + "Shōho (1644–1648)", + "Keian (1648–1652)", + "Jōō (1652–1655)", + "Meireki (1655–1658)", + "Manji (1658–1661)", + "Kanbun (1661–1673)", + "Enpō (1673–1681)", + "Tenna (1681–1684)", + "Jōkyō (1684–1688)", + "Genroku (1688–1704)", + "Hōei (1704–1711)", + "Shōtoku (1711–1716)", + "Kyōhō (1716–1736)", + "Genbun (1736–1741)", + "Kanpō (1741–1744)", + "Enkyō (1744–1748)", + "Kan’en (1748–1751)", + "Hōreki (1751–1764)", + "Meiwa (1764–1772)", + "An’ei (1772–1781)", + "Tenmei (1781–1789)", + "Kansei (1789–1801)", + "Kyōwa (1801–1804)", + "Bunka (1804–1818)", + "Bunsei (1818–1830)", + "Tenpō (1830–1844)", + "Kōka (1844–1848)", + "Kaei (1848–1854)", + "Ansei (1854–1860)", + "Man’en (1860–1861)", + "Bunkyū (1861–1864)", + "Genji (1864–1865)", + "Keiō (1865–1868)", + "Meiji", + "Taishō", + "Shōwa", + "Хейсей", + "Рейва", + } + } + } persian{ monthNames{ format{ diff --git a/icuSources/data/locales/yue.txt b/icuSources/data/locales/yue.txt index 363e89ef..4713c2d5 100644 --- a/icuSources/data/locales/yue.txt +++ b/icuSources/data/locales/yue.txt @@ -2411,6 +2411,7 @@ yue{ "大正", "昭和", "平成", + "令和", } } } diff --git a/icuSources/data/locales/yue_Hans.txt b/icuSources/data/locales/yue_Hans.txt index b002eca9..fc510f55 100644 --- a/icuSources/data/locales/yue_Hans.txt +++ b/icuSources/data/locales/yue_Hans.txt @@ -2409,6 +2409,7 @@ yue_Hans{ "大正", "昭和", "平成", + "令和", } } } diff --git a/icuSources/data/locales/zh.txt b/icuSources/data/locales/zh.txt index f1e5dceb..59eb9083 100644 --- a/icuSources/data/locales/zh.txt +++ b/icuSources/data/locales/zh.txt @@ -3451,6 +3451,7 @@ zh{ "大正", "昭和", "平成", + "令和", } narrow{ "大化(645–650)", @@ -3689,6 +3690,7 @@ zh{ "T", "S", "H", + "R", } wide{ "大化 (645–650)", @@ -3927,6 +3929,7 @@ zh{ "大正", "昭和", "平成", + "令和", } } } diff --git a/icuSources/data/locales/zh_Hant.txt b/icuSources/data/locales/zh_Hant.txt index e7cd9bfb..aac91979 100644 --- a/icuSources/data/locales/zh_Hant.txt +++ b/icuSources/data/locales/zh_Hant.txt @@ -5765,6 +5765,7 @@ zh_Hant{ "大正", "昭和", "平成", + "令和", } narrow{ "大化", @@ -6003,6 +6004,7 @@ zh_Hant{ "大正", "昭和", "平成", + "令和", } wide{ "大化", @@ -6241,6 +6243,7 @@ zh_Hant{ "大正", "昭和", "平成", + "令和", } } intervalFormats{ diff --git a/icuSources/data/misc/keyTypeData.txt b/icuSources/data/misc/keyTypeData.txt index af9cd881..54c89dca 100644 --- a/icuSources/data/misc/keyTypeData.txt +++ b/icuSources/data/misc/keyTypeData.txt @@ -628,6 +628,7 @@ keyTypeData:table(nofallback){ java{""} jpan{""} jpanfin{""} + jpanyear{""} kali{""} khmr{""} knda{""} diff --git a/icuSources/data/misc/numberingSystems.txt b/icuSources/data/misc/numberingSystems.txt index b1d6db00..18b7317a 100644 --- a/icuSources/data/misc/numberingSystems.txt +++ b/icuSources/data/misc/numberingSystems.txt @@ -172,6 +172,11 @@ numberingSystems:table(nofallback){ desc{"ja/SpelloutRules/%spellout-cardinal-financial"} radix:int{10} } + jpanyear{ + algorithmic:int{1} + desc{"ja/SpelloutRules/%spellout-numbering-year-latn"} + radix:int{10} + } kali{ algorithmic:int{0} desc{"꤀꤁꤂꤃꤄꤅꤆꤇꤈꤉"} diff --git a/icuSources/data/misc/supplementalData.txt b/icuSources/data/misc/supplementalData.txt index 5fc791b0..5b569d3e 100644 --- a/icuSources/data/misc/supplementalData.txt +++ b/icuSources/data/misc/supplementalData.txt @@ -6,8 +6,9 @@ supplementalData:table(nofallback){ eras{ 0{ start:intvector{ - -18457, - 643382272, + -542, + 1, + 1, } } } @@ -17,8 +18,9 @@ supplementalData:table(nofallback){ eras{ 0{ start:intvector{ - -33843, - 1352598528, + -2636, + 1, + 1, } } } @@ -28,14 +30,16 @@ supplementalData:table(nofallback){ eras{ 0{ end:intvector{ - -12383, - 368826367, + 284, + 8, + 28, } } 1{ start:intvector{ - -12383, - 368826368, + 284, + 8, + 29, } } } @@ -45,8 +49,9 @@ supplementalData:table(nofallback){ eras{ 0{ start:intvector{ - -31610, - -93940736, + -2332, + 1, + 1, } } } @@ -56,14 +61,16 @@ supplementalData:table(nofallback){ eras{ 0{ end:intvector{ - -14411, - 664902655, + 8, + 8, + 28, } } 1{ start:intvector{ - -14411, - 664902656, + 8, + 8, + 29, } } } @@ -73,8 +80,9 @@ supplementalData:table(nofallback){ eras{ 0{ end:intvector{ - -54823, - -2125298689, + -5492, + 8, + 29, } } } @@ -83,14 +91,16 @@ supplementalData:table(nofallback){ eras{ 0{ end:intvector{ - -14468, - -477728769, + 0, + 12, + 31, } } 1{ start:intvector{ - -14468, - -477728768, + 1, + 1, + 1, } } } @@ -100,8 +110,9 @@ supplementalData:table(nofallback){ eras{ 0{ start:intvector{ - -42096, - 1167292416, + -3760, + 10, + 7, } } } @@ -111,8 +122,9 @@ supplementalData:table(nofallback){ eras{ 0{ start:intvector{ - -13895, - -44389376, + 79, + 1, + 1, } } } @@ -121,8 +133,9 @@ supplementalData:table(nofallback){ eras{ 0{ start:intvector{ - -9901, - -1497369600, + 622, + 7, + 15, } } } @@ -132,8 +145,9 @@ supplementalData:table(nofallback){ eras{ 0{ start:intvector{ - -9901, - -1410969600, + 622, + 7, + 16, } } } @@ -143,8 +157,9 @@ supplementalData:table(nofallback){ eras{ 0{ start:intvector{ - -9901, - -1497369600, + 622, + 7, + 15, } } } @@ -154,8 +169,9 @@ supplementalData:table(nofallback){ eras{ 0{ start:intvector{ - -9901, - -1497369600, + 622, + 7, + 15, } } } @@ -165,8 +181,9 @@ supplementalData:table(nofallback){ eras{ 0{ start:intvector{ - -9901, - -1497369600, + 622, + 7, + 15, } } } @@ -176,1418 +193,1661 @@ supplementalData:table(nofallback){ eras{ 0{ start:intvector{ - -9732, - 548124672, + 645, + 6, + 19, } } 1{ start:intvector{ - -9698, - 1572036608, + 650, + 2, + 15, } } 10{ start:intvector{ - -9114, - 1157535744, + 729, + 8, + 5, } } 100{ start:intvector{ - -5884, - -819397632, + 1169, + 4, + 8, } } 101{ start:intvector{ - -5869, - -1048707072, + 1171, + 4, + 21, } } 102{ start:intvector{ - -5837, - 504906752, + 1175, + 7, + 28, } } 103{ start:intvector{ - -5823, - -156402688, + 1177, + 8, + 4, } } 104{ start:intvector{ - -5794, - -294454272, + 1181, + 7, + 14, } } 105{ start:intvector{ - -5787, - 1324541952, + 1182, + 5, + 27, } } 106{ start:intvector{ - -5773, - 810999808, + 1184, + 4, + 16, } } 107{ start:intvector{ - -5764, - -234673152, + 1185, + 8, + 14, } } 108{ start:intvector{ - -5729, - 702838784, + 1190, + 4, + 11, } } 109{ start:intvector{ - -5663, - -1680770048, + 1199, + 4, + 27, } } 11{ start:intvector{ - -8970, - -223922176, + 749, + 4, + 14, } } 110{ start:intvector{ - -5650, - -664144896, + 1201, + 2, + 13, } } 111{ start:intvector{ - -5627, - 59374592, + 1204, + 2, + 20, } } 112{ start:intvector{ - -5611, - 200697856, + 1206, + 4, + 27, } } 113{ start:intvector{ - -5600, - 130457600, + 1207, + 10, + 25, } } 114{ start:intvector{ - -5576, - -885324800, + 1211, + 3, + 9, } } 115{ start:intvector{ - -5556, - -125470720, + 1213, + 12, + 6, } } 116{ start:intvector{ - -5516, - 1110004736, + 1219, + 4, + 12, } } 117{ start:intvector{ - -5494, - 1401524224, + 1222, + 4, + 13, } } 118{ start:intvector{ - -5475, - 2049945600, + 1224, + 11, + 20, } } 119{ start:intvector{ - -5472, - -2083523584, + 1225, + 4, + 20, } } 12{ start:intvector{ - -8968, - -1988256768, + 749, + 7, + 2, } } 120{ start:intvector{ - -5453, - -398302208, + 1227, + 12, + 10, } } 121{ start:intvector{ - -5444, - -86607872, + 1229, + 3, + 5, } } 122{ start:intvector{ - -5421, - -1757255680, + 1232, + 4, + 2, } } 123{ start:intvector{ - -5413, - 837173248, + 1233, + 4, + 15, } } 124{ start:intvector{ - -5402, - -1540834304, + 1234, + 11, + 5, } } 125{ start:intvector{ - -5395, - 164561920, + 1235, + 9, + 19, } } 126{ start:intvector{ - -5372, - 1690714112, + 1238, + 11, + 23, } } 127{ start:intvector{ - -5371, - -332820480, + 1239, + 2, + 7, } } 128{ start:intvector{ - -5360, - 2077506560, + 1240, + 7, + 16, } } 129{ start:intvector{ - -5341, - -1309839360, + 1243, + 2, + 26, } } 13{ start:intvector{ - -8908, - 1130272768, + 757, + 8, + 18, } } 130{ start:intvector{ - -5311, - 539309056, + 1247, + 2, + 28, } } 131{ start:intvector{ - -5296, - 828399616, + 1249, + 3, + 18, } } 132{ start:intvector{ - -5241, - -1398568960, + 1256, + 10, + 5, } } 133{ start:intvector{ - -5238, - -459470848, + 1257, + 3, + 14, } } 134{ start:intvector{ - -5223, - -775180288, + 1259, + 3, + 26, } } 135{ start:intvector{ - -5215, - -1957318656, + 1260, + 4, + 13, } } 136{ start:intvector{ - -5209, - -683922432, + 1261, + 2, + 20, } } 137{ start:intvector{ - -5186, - 125997056, + 1264, + 2, + 28, } } 138{ start:intvector{ - -5105, - -67721216, + 1275, + 4, + 25, } } 139{ start:intvector{ - -5084, - -319634432, + 1278, + 2, + 29, } } 14{ start:intvector{ - -8854, - -1899328512, + 765, + 1, + 7, } } 140{ start:intvector{ - -5009, - -1811781632, + 1288, + 4, + 28, } } 141{ start:intvector{ - -4969, - 1324493824, + 1293, + 8, + 5, } } 142{ start:intvector{ - -4928, - 1400434688, + 1299, + 4, + 25, } } 143{ start:intvector{ - -4902, - -1725282304, + 1302, + 11, + 21, } } 144{ start:intvector{ - -4897, - -995318784, + 1303, + 8, + 5, } } 145{ start:intvector{ - -4872, - 1938266112, + 1306, + 12, + 14, } } 146{ start:intvector{ - -4859, - -735276032, + 1308, + 10, + 9, } } 147{ start:intvector{ - -4840, - -1901254656, + 1311, + 4, + 28, } } 148{ start:intvector{ - -4833, - 581741568, + 1312, + 3, + 20, } } 149{ start:intvector{ - -4798, - -158681088, + 1317, + 2, + 3, } } 15{ start:intvector{ - -8835, - -1337307136, + 767, + 8, + 16, } } 150{ start:intvector{ - -4781, - 1451442176, + 1319, + 4, + 28, } } 151{ start:intvector{ - -4768, - -1049299968, + 1321, + 2, + 23, } } 152{ start:intvector{ - -4740, - -1644384256, + 1324, + 12, + 9, } } 153{ start:intvector{ - -4730, - -1134857216, + 1326, + 4, + 26, } } 154{ start:intvector{ - -4705, - 1280327680, + 1329, + 8, + 29, } } 155{ start:intvector{ - -4691, - -1800181760, + 1331, + 8, + 9, } } 156{ start:intvector{ - -4673, - -1003993088, + 1334, + 1, + 29, } } 157{ start:intvector{ - -4657, - 321897472, + 1336, + 2, + 29, } } 158{ start:intvector{ - -4627, - -1494088704, + 1340, + 4, + 28, } } 159{ start:intvector{ - -4578, - 1003481088, + 1346, + 12, + 8, } } 16{ start:intvector{ - -8812, - -1452754944, + 770, + 10, + 1, } } 160{ start:intvector{ - -4405, - -775228416, + 1370, + 7, + 24, } } 161{ start:intvector{ - -4392, - 993964032, + 1372, + 4, + 1, } } 162{ start:intvector{ - -4369, - 1656116224, + 1375, + 5, + 27, } } 163{ start:intvector{ - -4341, - 1925031936, + 1379, + 3, + 22, } } 164{ start:intvector{ - -4327, - 1497889792, + 1381, + 2, + 10, } } 165{ start:intvector{ - -4304, - -234125312, + 1384, + 4, + 28, } } 166{ start:intvector{ - -4305, - -1209558016, + 1387, + 8, + 22, } } 167{ start:intvector{ - -4279, - 1403459584, + 1387, + 8, + 23, } } 168{ start:intvector{ - -4268, - 469219328, + 1389, + 2, + 9, } } 169{ start:intvector{ - -4260, - 1533480960, + 1390, + 3, + 26, } } 17{ start:intvector{ - -8737, - -7302144, + 781, + 1, + 1, } } 170{ start:intvector{ - -4229, - -948672512, + 1394, + 7, + 5, } } 171{ start:intvector{ - -3980, - 939438080, + 1428, + 4, + 27, } } 172{ start:intvector{ - -3970, - 844165120, + 1429, + 9, + 5, } } 173{ start:intvector{ - -3886, - 1478112256, + 1441, + 2, + 17, } } 174{ start:intvector{ - -3864, - 560031744, + 1444, + 2, + 5, } } 175{ start:intvector{ - -3824, - 1561339904, + 1449, + 7, + 28, } } 176{ start:intvector{ - -3802, - 1507259392, + 1452, + 7, + 25, } } 177{ start:intvector{ - -3780, - 1625978880, + 1455, + 7, + 25, } } 178{ start:intvector{ - -3764, - 1680902144, + 1457, + 9, + 28, } } 179{ start:intvector{ - -3740, - 553687040, + 1460, + 12, + 21, } } 18{ start:intvector{ - -8725, - -138909696, + 782, + 8, + 19, } } 180{ start:intvector{ - -3702, - 1072929792, + 1466, + 2, + 28, } } 181{ start:intvector{ - -3695, - -1491608576, + 1467, + 3, + 3, } } 182{ start:intvector{ - -3679, - 2080681984, + 1469, + 4, + 28, } } 183{ start:intvector{ - -3545, - -1797502976, + 1487, + 7, + 29, } } 184{ start:intvector{ - -3530, - -1076412416, + 1489, + 8, + 21, } } 185{ start:intvector{ - -3508, - 572474368, + 1492, + 7, + 19, } } 186{ start:intvector{ - -3445, - 1890334720, + 1501, + 2, + 29, } } 187{ start:intvector{ - -3423, - 2095454208, + 1504, + 2, + 30, } } 188{ start:intvector{ - -3295, - -377726976, + 1521, + 8, + 23, } } 189{ start:intvector{ - -3243, - 1244540928, + 1528, + 8, + 20, } } 19{ start:intvector{ - -8550, - 1883980800, + 806, + 5, + 18, } } 190{ start:intvector{ - -3214, - 1020089344, + 1532, + 7, + 29, } } 191{ start:intvector{ - -3044, - -228918272, + 1555, + 10, + 23, } } 192{ start:intvector{ - -3026, - 974237696, + 1558, + 2, + 28, } } 193{ start:intvector{ - -2937, - 2078948352, + 1570, + 4, + 23, } } 194{ start:intvector{ - -2913, - 1988533248, + 1573, + 7, + 28, } } 195{ start:intvector{ - -2771, - -1948590080, + 1592, + 12, + 8, } } 196{ start:intvector{ - -2742, - 393925632, + 1596, + 10, + 27, } } 197{ start:intvector{ - -2605, - -1940361216, + 1615, + 7, + 13, } } 198{ start:intvector{ - -2542, - -17700864, + 1624, + 2, + 30, } } 199{ start:intvector{ - -2389, - -939697152, + 1644, + 12, + 16, } } 2{ start:intvector{ - -9537, - 418301952, + 672, + 1, + 1, } } 20{ start:intvector{ - -8518, - 1389027328, + 810, + 9, + 19, } } 200{ start:intvector{ - -2365, - 154455040, + 1648, + 2, + 15, } } 201{ start:intvector{ - -2332, - -981633024, + 1652, + 9, + 18, } } 202{ start:intvector{ - -2313, - -1629211648, + 1655, + 4, + 13, } } 203{ start:intvector{ - -2289, - -1287626752, + 1658, + 7, + 23, } } 204{ start:intvector{ - -2269, - -182172672, + 1661, + 4, + 25, } } 205{ start:intvector{ - -2177, - 540603392, + 1673, + 9, + 21, } } 206{ start:intvector{ - -2118, - 289532928, + 1681, + 9, + 29, } } 207{ start:intvector{ - -2101, - -1419878400, + 1684, + 2, + 21, } } 208{ start:intvector{ - -2067, - -2037566464, + 1688, + 9, + 30, } } 209{ start:intvector{ - -1953, - 99929088, + 1704, + 3, + 13, } } 21{ start:intvector{ - -8420, - 40632320, + 824, + 1, + 5, } } 210{ start:intvector{ - -1901, - 1315229696, + 1711, + 4, + 25, } } 211{ start:intvector{ - -1863, - 970472448, + 1716, + 6, + 22, } } 212{ start:intvector{ - -1717, - 305247232, + 1736, + 4, + 28, } } 213{ start:intvector{ - -1682, - -1731175424, + 1741, + 2, + 27, } } 214{ start:intvector{ - -1660, - -2130855936, + 1744, + 2, + 21, } } 215{ start:intvector{ - -1628, - -1070609408, + 1748, + 7, + 12, } } 216{ start:intvector{ - -1604, - -297024512, + 1751, + 10, + 27, } } 217{ start:intvector{ - -1511, - -2116183040, + 1764, + 6, + 2, } } 218{ start:intvector{ - -1449, - -1514555392, + 1772, + 11, + 16, } } 219{ start:intvector{ - -1387, - 790039552, + 1781, + 4, + 2, } } 22{ start:intvector{ - -8347, - 1954419712, + 834, + 1, + 3, } } 220{ start:intvector{ - -1330, - -1646063616, + 1789, + 1, + 25, } } 221{ start:intvector{ - -1242, - -47985664, + 1801, + 2, + 5, } } 222{ start:intvector{ - -1219, - 589133824, + 1804, + 2, + 11, } } 223{ start:intvector{ - -1115, - 1810135040, + 1818, + 4, + 22, } } 224{ start:intvector{ - -1022, - 1114176512, + 1830, + 12, + 10, } } 225{ start:intvector{ - -920, - -109054976, + 1844, + 12, + 2, } } 226{ start:intvector{ - -896, - -977070080, + 1848, + 2, + 28, } } 227{ start:intvector{ - -846, - 1459132416, + 1854, + 11, + 27, } } 228{ start:intvector{ - -807, - 1398607872, + 1860, + 3, + 18, } } 229{ start:intvector{ - -800, - 537036800, + 1861, + 2, + 19, } } 23{ start:intvector{ - -8241, - -1847080960, + 848, + 6, + 13, } } 230{ start:intvector{ - -778, - 742156288, + 1864, + 2, + 20, } } 231{ start:intvector{ - -770, - 1979217920, + 1865, + 4, + 7, } } 232{ start:intvector{ - -745, - -1689931776, + 1868, + 9, + 8, } } 233{ start:intvector{ - -422, - 322598912, + 1912, + 7, + 30, } } 234{ start:intvector{ - -317, - -393534464, + 1926, + 12, + 25, } } 235{ start:intvector{ - 139, - -1074621440, + 1989, + 1, + 8, + } + } + 236{ + start:intvector{ + 2019, + 5, + 1, } } 24{ start:intvector{ - -8220, - -1407794176, + 851, + 4, + 28, } } 25{ start:intvector{ - -8193, - 279856128, + 854, + 11, + 30, } } 26{ start:intvector{ - -8177, - 1889979392, + 857, + 2, + 21, } } 27{ start:intvector{ - -8161, - 821702656, + 859, + 4, + 15, } } 28{ start:intvector{ - -8029, - 2052419584, + 877, + 4, + 16, } } 29{ start:intvector{ - -7971, - 739516416, + 885, + 2, + 21, } } 3{ start:intvector{ - -9431, - -13598720, + 686, + 7, + 20, } } 30{ start:intvector{ - -7941, - -558069760, + 889, + 4, + 27, } } 31{ start:intvector{ - -7875, - -115511296, + 898, + 4, + 26, } } 32{ start:intvector{ - -7851, - -1588326400, + 901, + 7, + 15, } } 33{ start:intvector{ - -7691, - 1527873536, + 923, + 4, + 11, } } 34{ start:intvector{ - -7632, - 1881603072, + 931, + 4, + 26, } } 35{ start:intvector{ - -7580, - 1714503680, + 938, + 5, + 22, } } 36{ start:intvector{ - -7515, - -348537856, + 947, + 4, + 22, } } 37{ start:intvector{ - -7437, - 801380352, + 957, + 10, + 27, } } 38{ start:intvector{ - -7413, - 2093365248, + 961, + 2, + 16, } } 39{ start:intvector{ - -7388, - 1855182848, + 964, + 7, + 10, } } 4{ start:intvector{ - -9323, - -938866688, + 701, + 3, + 21, } } 40{ start:intvector{ - -7358, - -2120803328, + 968, + 8, + 13, } } 41{ start:intvector{ - -7346, - 1524156416, + 970, + 3, + 25, } } 42{ start:intvector{ - -7319, - -712527872, + 973, + 12, + 20, } } 43{ start:intvector{ - -7300, - -1446506496, + 976, + 7, + 13, } } 44{ start:intvector{ - -7282, - 620649472, + 978, + 11, + 29, } } 45{ start:intvector{ - -7250, - 1248896000, + 983, + 4, + 15, } } 46{ start:intvector{ - -7235, - 1019586560, + 985, + 4, + 27, } } 47{ start:intvector{ - -7221, - 2061244416, + 987, + 4, + 5, } } 48{ start:intvector{ - -7204, - -1289766912, + 989, + 8, + 8, } } 49{ start:intvector{ - -7195, - -546072576, + 990, + 11, + 7, } } 5{ start:intvector{ - -9300, - -708714496, + 704, + 5, + 10, } } 50{ start:intvector{ - -7163, - 1785141248, + 995, + 2, + 22, } } 51{ start:intvector{ - -7134, - 5489664, + 999, + 1, + 13, } } 52{ start:intvector{ - -7094, - -1992169472, + 1004, + 7, + 20, } } 53{ start:intvector{ - -7032, - 2126825472, + 1012, + 12, + 25, } } 54{ start:intvector{ - -7000, - 1199872000, + 1017, + 4, + 23, } } 55{ start:intvector{ - -6972, - 259187712, + 1021, + 2, + 2, } } 56{ start:intvector{ - -6947, - 1489805312, + 1024, + 7, + 13, } } 57{ start:intvector{ - -6918, - -92013568, + 1028, + 7, + 25, } } 58{ start:intvector{ - -6853, - 818879488, + 1037, + 4, + 21, } } 59{ start:intvector{ - -6827, - 1383329792, + 1040, + 11, + 10, } } 6{ start:intvector{ - -9273, - -810431488, + 708, + 1, + 11, } } 60{ start:intvector{ - -6798, - -25689088, + 1044, + 11, + 24, } } 61{ start:intvector{ - -6787, - 743037952, + 1046, + 4, + 14, } } 62{ start:intvector{ - -6738, - -1115726848, + 1053, + 1, + 11, } } 63{ start:intvector{ - -6696, - 429014016, + 1058, + 8, + 29, } } 64{ start:intvector{ - -6646, - -22318080, + 1065, + 8, + 2, } } 65{ start:intvector{ - -6618, - 653564928, + 1069, + 4, + 13, } } 66{ start:intvector{ - -6579, - -1973926912, + 1074, + 8, + 23, } } 67{ start:intvector{ - -6555, - 1366625280, + 1077, + 11, + 17, } } 68{ start:intvector{ - -6531, - 325810176, + 1081, + 2, + 10, } } 69{ start:intvector{ - -6509, - 185329664, + 1084, + 2, + 7, } } 7{ start:intvector{ - -9217, - -186200064, + 715, + 9, + 2, } } 70{ start:intvector{ - -6486, - 1193081856, + 1087, + 4, + 7, } } 71{ start:intvector{ - -6430, - -922454016, + 1094, + 12, + 15, } } 72{ start:intvector{ - -6415, - -2015763456, + 1096, + 12, + 17, } } 73{ start:intvector{ - -6408, - 1504032768, + 1097, + 11, + 21, } } 74{ start:intvector{ - -6395, - 1397457920, + 1099, + 8, + 28, } } 75{ start:intvector{ - -6362, - 236337152, + 1104, + 2, + 10, } } 76{ start:intvector{ - -6347, - -313539584, + 1106, + 4, + 9, } } 77{ start:intvector{ - -6330, - -147183616, + 1108, + 8, + 3, } } 78{ start:intvector{ - -6315, - 980874240, + 1110, + 7, + 13, } } 79{ start:intvector{ - -6293, - 1185993728, + 1113, + 7, + 13, } } 8{ start:intvector{ - -9200, - 819123200, + 717, + 11, + 17, } } 80{ start:intvector{ - -6259, - -97861632, + 1118, + 4, + 3, } } 81{ start:intvector{ - -6244, - -759171072, + 1120, + 4, + 10, } } 82{ start:intvector{ - -6214, - 312377344, + 1124, + 4, + 3, } } 83{ start:intvector{ - -6201, - 1415402496, + 1126, + 1, + 22, } } 84{ start:intvector{ - -6164, - 872812544, + 1131, + 1, + 29, } } 85{ start:intvector{ - -6153, - 2012172288, + 1132, + 8, + 11, } } 86{ start:intvector{ - -6133, - 1562426368, + 1135, + 4, + 27, } } 87{ start:intvector{ - -6088, - -223669248, + 1141, + 7, + 10, } } 88{ start:intvector{ - -6082, - -764673024, + 1142, + 4, + 28, } } 89{ start:intvector{ - -6068, - 943152128, + 1144, + 2, + 23, } } 9{ start:intvector{ - -9155, - -621372416, + 724, + 2, + 4, } } 90{ start:intvector{ - -6058, - -1805488128, + 1145, + 7, + 22, } } 91{ start:intvector{ - -6017, - 405420032, + 1151, + 1, + 26, } } 92{ start:intvector{ - -5990, - -1399264256, + 1154, + 10, + 28, } } 93{ start:intvector{ - -5979, - -1383104512, + 1156, + 4, + 27, } } 94{ start:intvector{ - -5957, - -1869185024, + 1159, + 4, + 20, } } 95{ start:intvector{ - -5952, - -448021504, + 1160, + 1, + 10, } } 96{ start:intvector{ - -5939, - 111570944, + 1161, + 9, + 4, } } 97{ start:intvector{ - -5928, - -2093636608, + 1163, + 3, + 29, } } 98{ start:intvector{ - -5912, - -1779513344, + 1165, + 6, + 5, } } 99{ start:intvector{ - -5903, - -1727019008, + 1166, + 8, + 27, } } } @@ -1597,8 +1857,9 @@ supplementalData:table(nofallback){ eras{ 0{ start:intvector{ - -9905, - -1165500416, + 622, + 1, + 1, } } } @@ -1608,14 +1869,16 @@ supplementalData:table(nofallback){ eras{ 0{ end:intvector{ - -427, - -727931905, + 1911, + 12, + 31, } } 1{ start:intvector{ - -427, - -727931904, + 1912, + 1, + 1, } } } diff --git a/icuSources/data/rbnf/ja.txt b/icuSources/data/rbnf/ja.txt index db01443a..0ddc6f12 100644 --- a/icuSources/data/rbnf/ja.txt +++ b/icuSources/data/rbnf/ja.txt @@ -8,6 +8,11 @@ ja{ "0: \u7B2C=#,##0=;", } SpelloutRules{ + "%spellout-numbering-year-latn:", + "x.x: =0.0=;", + "0: =0=;", + "1: \u5143;", + "2: =0=;", "%spellout-numbering-year:", "x.x: =0.0=;", "0: =%spellout-numbering=;", @@ -73,5 +78,5 @@ ja{ "0: \u7B2C=%spellout-numbering=;", } } - Version{"2.1.27.22"} + Version{"2.1.27.23"} } diff --git a/icuSources/data/region/ja.txt b/icuSources/data/region/ja.txt index a3871e7a..244e14ae 100644 --- a/icuSources/data/region/ja.txt +++ b/icuSources/data/region/ja.txt @@ -81,7 +81,7 @@ ja{ CK{"クック諸島"} CL{"チリ"} CM{"カメルーン"} - CN{"中国大陸"} + CN{"中国本土"} CO{"コロンビア"} CP{"クリッパートン島"} CR{"コスタリカ"} diff --git a/icuSources/i18n/Makefile.in b/icuSources/i18n/Makefile.in index 7bdf99ad..cd33045a 100644 --- a/icuSources/i18n/Makefile.in +++ b/icuSources/i18n/Makefile.in @@ -115,7 +115,7 @@ double-conversion-fast-dtoa.o double-conversion-strtod.o \ numparse_stringsegment.o numparse_parsednumber.o numparse_impl.o \ numparse_symbols.o numparse_decimal.o numparse_scientific.o numparse_currency.o \ numparse_affixes.o numparse_compositions.o numparse_validators.o \ - +erarules.o ## Header files to install HEADERS = $(srcdir)/unicode/*.h diff --git a/icuSources/i18n/dtitvfmt.cpp b/icuSources/i18n/dtitvfmt.cpp index ab882cab..1a3cc986 100644 --- a/icuSources/i18n/dtitvfmt.cpp +++ b/icuSources/i18n/dtitvfmt.cpp @@ -1080,7 +1080,10 @@ DateIntervalFormat::setSeparateDateTimePtn( } setIntervalPattern(UCAL_YEAR, skeleton, bestSkeleton, differenceInfo, &extendedSkeleton, &extendedBestSkeleton); + setIntervalPattern(UCAL_ERA, skeleton, bestSkeleton, differenceInfo, + &extendedSkeleton, &extendedBestSkeleton); } else { + // what about seconds handling? setIntervalPattern(UCAL_MINUTE, skeleton, bestSkeleton, differenceInfo); setIntervalPattern(UCAL_HOUR, skeleton, bestSkeleton, differenceInfo); setIntervalPattern(UCAL_AM_PM, skeleton, bestSkeleton, differenceInfo); diff --git a/icuSources/i18n/dtitvinf.cpp b/icuSources/i18n/dtitvinf.cpp index c863a683..d00668be 100644 --- a/icuSources/i18n/dtitvinf.cpp +++ b/icuSources/i18n/dtitvinf.cpp @@ -326,7 +326,9 @@ struct DateIntervalInfo::DateIntervalSink : public ResourceSink { char c0; if ((c0 = patternLetter[0]) != 0 && patternLetter[1] == 0) { // Check that the pattern letter is accepted - if (c0 == 'y') { + if (c0 == 'G') { + return UCAL_ERA; + } else if (c0 == 'y') { return UCAL_YEAR; } else if (c0 == 'M') { return UCAL_MONTH; diff --git a/icuSources/i18n/erarules.cpp b/icuSources/i18n/erarules.cpp new file mode 100644 index 00000000..474ebba1 --- /dev/null +++ b/icuSources/i18n/erarules.cpp @@ -0,0 +1,311 @@ +// © 2018 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html + +#include + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_FORMATTING + +#include +#include "unicode/ucal.h" +#include "unicode/ures.h" +#include "unicode/ustring.h" +#include "cmemory.h" +#include "cstring.h" +#include "erarules.h" +#include "gregoimp.h" +#include "uassert.h" + +U_NAMESPACE_BEGIN + +static const int32_t MAX_ENCODED_START_YEAR = 32767; +static const int32_t MIN_ENCODED_START_YEAR = -32768; +static const int32_t MIN_ENCODED_START = -2147483391; // encodeDate(MIN_ENCODED_START_YEAR, 1, 1, ...); + +static const int32_t YEAR_MASK = 0xFFFF0000; +static const int32_t MONTH_MASK = 0x0000FF00; +static const int32_t DAY_MASK = 0x000000FF; + +static const int32_t MAX_INT32 = 0x7FFFFFFF; +static const int32_t MIN_INT32 = 0xFFFFFFFF; + +static const UChar VAL_FALSE[] = {0x66, 0x61, 0x6c, 0x73, 0x65}; // "false" +static const UChar VAL_FALSE_LEN = 5; + +static UBool isSet(int startDate) { + return startDate != 0; +} + +static UBool isValidRuleStartDate(int32_t year, int32_t month, int32_t day) { + return year >= MIN_ENCODED_START_YEAR && year <= MAX_ENCODED_START_YEAR + && month >= 1 && month <= 12 && day >=1 && day <= 31; +} + +/** + * Encode year/month/date to a single integer. + * year is high 16 bits (-32768 to 32767), month is + * next 8 bits and day of month is last 8 bits. + * + * @param year year + * @param month month (1-base) + * @param day day of month + * @return an encoded date. + */ +static int32_t encodeDate(int32_t year, int32_t month, int32_t day) { + return year << 16 | month << 8 | day; +} + +static void decodeDate(int32_t encodedDate, int32_t (&fields)[3]) { + if (encodedDate == MIN_ENCODED_START) { + fields[0] = MIN_INT32; + fields[1] = 1; + fields[2] = 1; + } else { + fields[0] = (encodedDate & YEAR_MASK) >> 16; + fields[1] = (encodedDate & MONTH_MASK) >> 8; + fields[2] = encodedDate & DAY_MASK; + } +} + +/** + * Compare an encoded date with another date specified by year/month/day. + * @param encoded An encoded date + * @param year Year of another date + * @param month Month of another date + * @param day Day of another date + * @return -1 when encoded date is earlier, 0 when two dates are same, + * and 1 when encoded date is later. + */ +static int32_t compareEncodedDateWithYMD(int encoded, int year, int month, int day) { + if (year < MIN_ENCODED_START_YEAR) { + if (encoded == MIN_ENCODED_START) { + if (year > MIN_INT32 || month > 1 || day > 1) { + return -1; + } + return 0; + } else { + return 1; + } + } else if (year > MAX_ENCODED_START_YEAR) { + return -1; + } else { + int tmp = encodeDate(year, month, day); + if (encoded < tmp) { + return -1; + } else if (encoded == tmp) { + return 0; + } else { + return 1; + } + } +} + +EraRules::EraRules(LocalMemory& eraStartDates, int32_t numEras) + : numEras(numEras) { + startDates = std::move(eraStartDates); + initCurrentEra(); +} + +EraRules::~EraRules() { +} + +EraRules* EraRules::createInstance(const char *calType, UBool includeTentativeEra, UErrorCode& status) { + if(U_FAILURE(status)) { + return nullptr; + } + LocalUResourceBundlePointer rb(ures_openDirect(nullptr, "supplementalData", &status)); + ures_getByKey(rb.getAlias(), "calendarData", rb.getAlias(), &status); + ures_getByKey(rb.getAlias(), calType, rb.getAlias(), &status); + ures_getByKey(rb.getAlias(), "eras", rb.getAlias(), &status); + + if (U_FAILURE(status)) { + return nullptr; + } + + int32_t numEras = ures_getSize(rb.getAlias()); + int32_t firstTentativeIdx = MAX_INT32; + + LocalMemory startDates(static_cast(uprv_malloc(numEras * sizeof(int32_t)))); + if (startDates.isNull()) { + status = U_MEMORY_ALLOCATION_ERROR; + return nullptr; + } + uprv_memset(startDates.getAlias(), 0 , numEras * sizeof(int32_t)); + + while (ures_hasNext(rb.getAlias())) { + LocalUResourceBundlePointer eraRuleRes(ures_getNextResource(rb.getAlias(), nullptr, &status)); + if (U_FAILURE(status)) { + return nullptr; + } + const char *eraIdxStr = ures_getKey(eraRuleRes.getAlias()); + char *endp; + int32_t eraIdx = (int32_t)strtol(eraIdxStr, &endp, 10); + if ((size_t)(endp - eraIdxStr) != uprv_strlen(eraIdxStr)) { + status = U_INVALID_FORMAT_ERROR; + return nullptr; + } + if (eraIdx < 0 || eraIdx >= numEras) { + status = U_INVALID_FORMAT_ERROR; + return nullptr; + } + if (isSet(startDates[eraIdx])) { + // start date of the index was already set + status = U_INVALID_FORMAT_ERROR; + return nullptr; + } + + UBool hasName = TRUE; + UBool hasEnd = TRUE; + int32_t len; + while (ures_hasNext(eraRuleRes.getAlias())) { + LocalUResourceBundlePointer res(ures_getNextResource(eraRuleRes.getAlias(), nullptr, &status)); + if (U_FAILURE(status)) { + return nullptr; + } + const char *key = ures_getKey(res.getAlias()); + if (uprv_strcmp(key, "start") == 0) { + const int32_t *fields = ures_getIntVector(res.getAlias(), &len, &status); + if (U_FAILURE(status)) { + return nullptr; + } + if (len != 3 || !isValidRuleStartDate(fields[0], fields[1], fields[2])) { + status = U_INVALID_FORMAT_ERROR; + return nullptr; + } + startDates[eraIdx] = encodeDate(fields[0], fields[1], fields[2]); + } else if (uprv_strcmp(key, "named") == 0) { + const UChar *val = ures_getString(res.getAlias(), &len, &status); + if (u_strncmp(val, VAL_FALSE, VAL_FALSE_LEN) == 0) { + hasName = FALSE; + } + } else if (uprv_strcmp(key, "end") == 0) { + hasEnd = TRUE; + } + } + + if (isSet(startDates[eraIdx])) { + if (hasEnd) { + // This implementation assumes either start or end is available, not both. + // For now, just ignore the end rule. + } + } else { + if (hasEnd) { + if (eraIdx != 0) { + // This implementation does not support end only rule for eras other than + // the first one. + status = U_INVALID_FORMAT_ERROR; + return nullptr; + } + U_ASSERT(eraIdx == 0); + startDates[eraIdx] = MIN_ENCODED_START; + } else { + status = U_INVALID_FORMAT_ERROR; + return nullptr; + } + } + + if (hasName) { + if (eraIdx >= firstTentativeIdx) { + status = U_INVALID_FORMAT_ERROR; + return nullptr; + } + } else { + if (eraIdx < firstTentativeIdx) { + firstTentativeIdx = eraIdx; + } + } + } + + EraRules *result; + if (firstTentativeIdx < MAX_INT32 && !includeTentativeEra) { + result = new EraRules(startDates, firstTentativeIdx); + } else { + result = new EraRules(startDates, numEras); + } + + if (result == nullptr) { + status = U_MEMORY_ALLOCATION_ERROR; + } + return result; +} + +void EraRules::getStartDate(int32_t eraIdx, int32_t (&fields)[3], UErrorCode& status) const { + if(U_FAILURE(status)) { + return; + } + if (eraIdx < 0 || eraIdx >= numEras) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + decodeDate(startDates[eraIdx], fields); +} + +int32_t EraRules::getStartYear(int32_t eraIdx, UErrorCode& status) const { + int year = MAX_INT32/2; // bogus value (/2 so don't overflow elsewhere ) + if(U_FAILURE(status)) { + return year; + } + if (eraIdx < 0 || eraIdx >= numEras) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return year; + } + int fields[3]; + decodeDate(startDates[eraIdx], fields); + year = fields[0]; + + return year; +} + +int32_t EraRules::getEraIndex(int32_t year, int32_t month, int32_t day, UErrorCode& status) const { + if(U_FAILURE(status)) { + return -1; + } + + if (month < 1 || month > 12 || day < 1 || day > 31) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return -1; + } + int32_t high = numEras; // last index + 1 + int32_t low; + + // Short circuit for recent years. Most modern computations will + // occur in the last few eras. + if (compareEncodedDateWithYMD(startDates[getCurrentEraIndex()], year, month, day) <= 0) { + low = getCurrentEraIndex(); + } else { + low = 0; + } + + // Do binary search + while (low < high - 1) { + int i = (low + high) / 2; + if (compareEncodedDateWithYMD(startDates[i], year, month, day) <= 0) { + low = i; + } else { + high = i; + } + } + return low; +} + +void EraRules::initCurrentEra() { + UDate now = ucal_getNow(); + int year, month0, dom, dow, doy, mid; + Grego::timeToFields(now, year, month0, dom, dow, doy, mid); + int currentEncodedDate = encodeDate(year, month0 + 1 /* changes to 1-base */, dom); + int eraIdx = numEras - 1; + while (eraIdx > 0) { + if (currentEncodedDate >= startDates[eraIdx]) { + break; + } + eraIdx--; + } + // Note: current era could be before the first era. + // In this case, this implementation returns the first era index (0). + currentEra = eraIdx;} + +U_NAMESPACE_END +#endif /* #if !UCONFIG_NO_FORMATTING */ + + diff --git a/icuSources/i18n/erarules.h b/icuSources/i18n/erarules.h new file mode 100644 index 00000000..620f27cb --- /dev/null +++ b/icuSources/i18n/erarules.h @@ -0,0 +1,98 @@ +// © 2018 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html + +#ifndef ERARULES_H_ +#define ERARULES_H_ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_FORMATTING + +#include "unicode/localpointer.h" +#include "unicode/uobject.h" +#include "cmemory.h" + +U_NAMESPACE_BEGIN + +// Export an explicit template instantiation of LocalMemory used as a data member of EraRules. +// When building DLLs for Windows this is required even though no direct access leaks out of the i18n library. +// See digitlst.h, pluralaffix.h, datefmt.h, and others for similar examples. +#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN +#if defined(_MSC_VER) +// Ignore warning 4661 as LocalPointerBase does not use operator== or operator!= +#pragma warning(push) +#pragma warning(disable: 4661) +#endif +template class U_I18N_API LocalPointerBase; +template class U_I18N_API LocalMemory; +#if defined(_MSC_VER) +#pragma warning(pop) +#endif +#endif + +class U_I18N_API EraRules : public UMemory { +public: + ~EraRules(); + + static EraRules* createInstance(const char *calType, UBool includeTentativeEra, UErrorCode& status); + + /** + * Gets number of effective eras + * @return number of effective eras + */ + inline int32_t getNumberOfEras() const { + return numEras; + } + + /** + * Gets start date of an era + * @param eraIdx Era index + * @param fields Receives date fields. The result includes values of year, month, + * day of month in this order. When an era has no start date, the result + * will be January 1st in year whose value is minimum integer. + * @param status Receives status. + */ + void getStartDate(int32_t eraIdx, int32_t (&fields)[3], UErrorCode& status) const; + + /** + * Gets start year of an era + * @param eraIdx Era index + * @param status Receives status. + * @return The first year of an era. When a era has no start date, minimum int32 + * value is returned. + */ + int32_t getStartYear(int32_t eraIdx, UErrorCode& status) const; + + /** + * Returns era index for the specified year/month/day. + * @param year Year + * @param month Month (1-base) + * @param day Day of month + * @param status Receives status + * @return era index (or 0, when the specified date is before the first era) + */ + int32_t getEraIndex(int32_t year, int32_t month, int32_t day, UErrorCode& status) const; + + /** + * Gets the current era index. This is calculated only once for an instance of + * EraRules. + * + * @return era index of current era (or 0, when current date is before the first era) + */ + inline int32_t getCurrentEraIndex() const { + return currentEra; + } + +private: + EraRules(LocalMemory& eraStartDates, int32_t numEra); + + void initCurrentEra(); + + LocalMemory startDates; + int32_t numEras; + int32_t currentEra; +}; + +U_NAMESPACE_END +#endif /* #if !UCONFIG_NO_FORMATTING */ +#endif /* ERARULES_H_ */ diff --git a/icuSources/i18n/i18n.vcxproj b/icuSources/i18n/i18n.vcxproj index 0af58a63..fdc65a6e 100644 --- a/icuSources/i18n/i18n.vcxproj +++ b/icuSources/i18n/i18n.vcxproj @@ -160,6 +160,7 @@ + @@ -408,6 +409,7 @@ + diff --git a/icuSources/i18n/i18n.vcxproj.filters b/icuSources/i18n/i18n.vcxproj.filters index 494c8e16..9146cdfa 100644 --- a/icuSources/i18n/i18n.vcxproj.filters +++ b/icuSources/i18n/i18n.vcxproj.filters @@ -621,6 +621,9 @@ formatting + + formatting + @@ -1178,6 +1181,9 @@ collation + + formatting + diff --git a/icuSources/i18n/i18n_uwp.vcxproj b/icuSources/i18n/i18n_uwp.vcxproj index 6379486d..adb92b51 100644 --- a/icuSources/i18n/i18n_uwp.vcxproj +++ b/icuSources/i18n/i18n_uwp.vcxproj @@ -267,6 +267,7 @@ + @@ -513,6 +514,7 @@ + diff --git a/icuSources/i18n/japancal.cpp b/icuSources/i18n/japancal.cpp index 17b4e076..0fead593 100644 --- a/icuSources/i18n/japancal.cpp +++ b/icuSources/i18n/japancal.cpp @@ -16,286 +16,105 @@ #include "unicode/utypes.h" #if !UCONFIG_NO_FORMATTING - +#if U_PLATFORM_HAS_WINUWP_API == 0 +#include // getenv() is not available in UWP env +#else +#ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +#endif +# define VC_EXTRALEAN +# define NOUSER +# define NOSERVICE +# define NOIME +# define NOMCX +#include +#endif #include "cmemory.h" +#include "erarules.h" #include "japancal.h" #include "unicode/gregocal.h" #include "umutex.h" #include "uassert.h" - -//#define U_DEBUG_JCAL - -#ifdef U_DEBUG_JCAL -#include -#endif +#include "ucln_in.h" +#include "cstring.h" + +static icu::EraRules * gJapaneseEraRules = nullptr; +static icu::UInitOnce gJapaneseEraRulesInitOnce = U_INITONCE_INITIALIZER; +static int32_t gCurrentEra = 0; + +U_CDECL_BEGIN +static UBool japanese_calendar_cleanup(void) { + if (gJapaneseEraRules) { + delete gJapaneseEraRules; + gJapaneseEraRules = nullptr; + } + gCurrentEra = 0; + gJapaneseEraRulesInitOnce.reset(); + return TRUE; +} +U_CDECL_END U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(JapaneseCalendar) -// Gregorian date of each emperor's ascension -// Years are AD, months are 1-based. -static const struct { - int16_t year; - int8_t month; - int8_t day; -} kEraInfo[] = { - // Year Month Day - { 645, 6, 19 }, // Taika 0 - { 650, 2, 15 }, // Hakuchi 1 - { 672, 1, 1 }, // Hakuho 2 - { 686, 7, 20 }, // Shucho 3 - { 701, 3, 21 }, // Taiho 4 - { 704, 5, 10 }, // Keiun 5 - { 708, 1, 11 }, // Wado 6 - { 715, 9, 2 }, // Reiki 7 - { 717, 11, 17 }, // Yoro 8 - { 724, 2, 4 }, // Jinki 9 - { 729, 8, 5 }, // Tempyo 10 - { 749, 4, 14 }, // Tempyo-kampo 11 - { 749, 7, 2 }, // Tempyo-shoho 12 - { 757, 8, 18 }, // Tempyo-hoji 13 - { 765, 1, 7 }, // Tempho-jingo 14 - { 767, 8, 16 }, // Jingo-keiun 15 - { 770, 10, 1 }, // Hoki 16 - { 781, 1, 1 }, // Ten-o 17 - { 782, 8, 19 }, // Enryaku 18 - { 806, 5, 18 }, // Daido 19 - { 810, 9, 19 }, // Konin 20 - { 824, 1, 5 }, // Tencho - { 834, 1, 3 }, // Showa - { 848, 6, 13 }, // Kajo - { 851, 4, 28 }, // Ninju - { 854, 11, 30 }, // Saiko - { 857, 2, 21 }, // Tennan - { 859, 4, 15 }, // Jogan - { 877, 4, 16 }, // Genkei - { 885, 2, 21 }, // Ninna - { 889, 4, 27 }, // Kampyo 30 - { 898, 4, 26 }, // Shotai - { 901, 7, 15 }, // Engi - { 923, 4, 11 }, // Encho - { 931, 4, 26 }, // Shohei - { 938, 5, 22 }, // Tengyo - { 947, 4, 22 }, // Tenryaku - { 957, 10, 27 }, // Tentoku - { 961, 2, 16 }, // Owa - { 964, 7, 10 }, // Koho - { 968, 8, 13 }, // Anna 40 - { 970, 3, 25 }, // Tenroku - { 973, 12, 20 }, // Ten-en - { 976, 7, 13 }, // Jogen - { 978, 11, 29 }, // Tengen - { 983, 4, 15 }, // Eikan - { 985, 4, 27 }, // Kanna - { 987, 4, 5 }, // Ei-en - { 989, 8, 8 }, // Eiso - { 990, 11, 7 }, // Shoryaku - { 995, 2, 22 }, // Chotoku 50 - { 999, 1, 13 }, // Choho - { 1004, 7, 20 }, // Kanko - { 1012, 12, 25 }, // Chowa - { 1017, 4, 23 }, // Kannin - { 1021, 2, 2 }, // Jian - { 1024, 7, 13 }, // Manju - { 1028, 7, 25 }, // Chogen - { 1037, 4, 21 }, // Choryaku - { 1040, 11, 10 }, // Chokyu - { 1044, 11, 24 }, // Kantoku 60 - { 1046, 4, 14 }, // Eisho - { 1053, 1, 11 }, // Tengi - { 1058, 8, 29 }, // Kohei - { 1065, 8, 2 }, // Jiryaku - { 1069, 4, 13 }, // Enkyu - { 1074, 8, 23 }, // Shoho - { 1077, 11, 17 }, // Shoryaku - { 1081, 2, 10 }, // Eiho - { 1084, 2, 7 }, // Otoku - { 1087, 4, 7 }, // Kanji 70 - { 1094, 12, 15 }, // Kaho - { 1096, 12, 17 }, // Eicho - { 1097, 11, 21 }, // Shotoku - { 1099, 8, 28 }, // Kowa - { 1104, 2, 10 }, // Choji - { 1106, 4, 9 }, // Kasho - { 1108, 8, 3 }, // Tennin - { 1110, 7, 13 }, // Ten-ei - { 1113, 7, 13 }, // Eikyu - { 1118, 4, 3 }, // Gen-ei 80 - { 1120, 4, 10 }, // Hoan - { 1124, 4, 3 }, // Tenji - { 1126, 1, 22 }, // Daiji - { 1131, 1, 29 }, // Tensho - { 1132, 8, 11 }, // Chosho - { 1135, 4, 27 }, // Hoen - { 1141, 7, 10 }, // Eiji - { 1142, 4, 28 }, // Koji - { 1144, 2, 23 }, // Tenyo - { 1145, 7, 22 }, // Kyuan 90 - { 1151, 1, 26 }, // Ninpei - { 1154, 10, 28 }, // Kyuju - { 1156, 4, 27 }, // Hogen - { 1159, 4, 20 }, // Heiji - { 1160, 1, 10 }, // Eiryaku - { 1161, 9, 4 }, // Oho - { 1163, 3, 29 }, // Chokan - { 1165, 6, 5 }, // Eiman - { 1166, 8, 27 }, // Nin-an - { 1169, 4, 8 }, // Kao 100 - { 1171, 4, 21 }, // Shoan - { 1175, 7, 28 }, // Angen - { 1177, 8, 4 }, // Jisho - { 1181, 7, 14 }, // Yowa - { 1182, 5, 27 }, // Juei - { 1184, 4, 16 }, // Genryuku - { 1185, 8, 14 }, // Bunji - { 1190, 4, 11 }, // Kenkyu - { 1199, 4, 27 }, // Shoji - { 1201, 2, 13 }, // Kennin 110 - { 1204, 2, 20 }, // Genkyu - { 1206, 4, 27 }, // Ken-ei - { 1207, 10, 25 }, // Shogen - { 1211, 3, 9 }, // Kenryaku - { 1213, 12, 6 }, // Kenpo - { 1219, 4, 12 }, // Shokyu - { 1222, 4, 13 }, // Joo - { 1224, 11, 20 }, // Gennin - { 1225, 4, 20 }, // Karoku - { 1227, 12, 10 }, // Antei 120 - { 1229, 3, 5 }, // Kanki - { 1232, 4, 2 }, // Joei - { 1233, 4, 15 }, // Tempuku - { 1234, 11, 5 }, // Bunryaku - { 1235, 9, 19 }, // Katei - { 1238, 11, 23 }, // Ryakunin - { 1239, 2, 7 }, // En-o - { 1240, 7, 16 }, // Ninji - { 1243, 2, 26 }, // Kangen - { 1247, 2, 28 }, // Hoji 130 - { 1249, 3, 18 }, // Kencho - { 1256, 10, 5 }, // Kogen - { 1257, 3, 14 }, // Shoka - { 1259, 3, 26 }, // Shogen - { 1260, 4, 13 }, // Bun-o - { 1261, 2, 20 }, // Kocho - { 1264, 2, 28 }, // Bun-ei - { 1275, 4, 25 }, // Kenji - { 1278, 2, 29 }, // Koan - { 1288, 4, 28 }, // Shoo 140 - { 1293, 8, 55 }, // Einin - { 1299, 4, 25 }, // Shoan - { 1302, 11, 21 }, // Kengen - { 1303, 8, 5 }, // Kagen - { 1306, 12, 14 }, // Tokuji - { 1308, 10, 9 }, // Enkei - { 1311, 4, 28 }, // Ocho - { 1312, 3, 20 }, // Showa - { 1317, 2, 3 }, // Bunpo - { 1319, 4, 28 }, // Geno 150 - { 1321, 2, 23 }, // Genkyo - { 1324, 12, 9 }, // Shochu - { 1326, 4, 26 }, // Kareki - { 1329, 8, 29 }, // Gentoku - { 1331, 8, 9 }, // Genko - { 1334, 1, 29 }, // Kemmu - { 1336, 2, 29 }, // Engen - { 1340, 4, 28 }, // Kokoku - { 1346, 12, 8 }, // Shohei - { 1370, 7, 24 }, // Kentoku 160 - { 1372, 4, 1 }, // Bunch\u0169 - { 1375, 5, 27 }, // Tenju - { 1379, 3, 22 }, // Koryaku - { 1381, 2, 10 }, // Kowa - { 1384, 4, 28 }, // Gench\u0169 - { 1384, 2, 27 }, // Meitoku - { 1387, 8, 23 }, // Kakei - { 1389, 2, 9 }, // Koo - { 1390, 3, 26 }, // Meitoku - { 1394, 7, 5 }, // Oei 170 - { 1428, 4, 27 }, // Shocho - { 1429, 9, 5 }, // Eikyo - { 1441, 2, 17 }, // Kakitsu - { 1444, 2, 5 }, // Bun-an - { 1449, 7, 28 }, // Hotoku - { 1452, 7, 25 }, // Kyotoku - { 1455, 7, 25 }, // Kosho - { 1457, 9, 28 }, // Choroku - { 1460, 12, 21 }, // Kansho - { 1466, 2, 28 }, // Bunsho 180 - { 1467, 3, 3 }, // Onin - { 1469, 4, 28 }, // Bunmei - { 1487, 7, 29 }, // Chokyo - { 1489, 8, 21 }, // Entoku - { 1492, 7, 19 }, // Meio - { 1501, 2, 29 }, // Bunki - { 1504, 2, 30 }, // Eisho - { 1521, 8, 23 }, // Taiei - { 1528, 8, 20 }, // Kyoroku - { 1532, 7, 29 }, // Tenmon 190 - { 1555, 10, 23 }, // Koji - { 1558, 2, 28 }, // Eiroku - { 1570, 4, 23 }, // Genki - { 1573, 7, 28 }, // Tensho - { 1592, 12, 8 }, // Bunroku - { 1596, 10, 27 }, // Keicho - { 1615, 7, 13 }, // Genwa - { 1624, 2, 30 }, // Kan-ei - { 1644, 12, 16 }, // Shoho - { 1648, 2, 15 }, // Keian 200 - { 1652, 9, 18 }, // Shoo - { 1655, 4, 13 }, // Meiryaku - { 1658, 7, 23 }, // Manji - { 1661, 4, 25 }, // Kanbun - { 1673, 9, 21 }, // Enpo - { 1681, 9, 29 }, // Tenwa - { 1684, 2, 21 }, // Jokyo - { 1688, 9, 30 }, // Genroku - { 1704, 3, 13 }, // Hoei - { 1711, 4, 25 }, // Shotoku 210 - { 1716, 6, 22 }, // Kyoho - { 1736, 4, 28 }, // Genbun - { 1741, 2, 27 }, // Kanpo - { 1744, 2, 21 }, // Enkyo - { 1748, 7, 12 }, // Kan-en - { 1751, 10, 27 }, // Horyaku - { 1764, 6, 2 }, // Meiwa - { 1772, 11, 16 }, // An-ei - { 1781, 4, 2 }, // Tenmei - { 1789, 1, 25 }, // Kansei 220 - { 1801, 2, 5 }, // Kyowa - { 1804, 2, 11 }, // Bunka - { 1818, 4, 22 }, // Bunsei - { 1830, 12, 10 }, // Tenpo - { 1844, 12, 2 }, // Koka - { 1848, 2, 28 }, // Kaei - { 1854, 11, 27 }, // Ansei - { 1860, 3, 18 }, // Man-en - { 1861, 2, 19 }, // Bunkyu - { 1864, 2, 20 }, // Genji 230 - { 1865, 4, 7 }, // Keio 231 - { 1868, 9, 8 }, // Meiji 232 - { 1912, 7, 30 }, // Taisho 233 - { 1926, 12, 25 }, // Showa 234 - { 1989, 1, 8 } // Heisei 235 -}; - -#define kEraCount UPRV_LENGTHOF(kEraInfo) - -/** - * The current era, for reference. - */ -static const int32_t kCurrentEra = (kEraCount-1); // int32_t to match the calendar field type - static const int32_t kGregorianEpoch = 1970; // used as the default value of EXTENDED_YEAR +static const char* TENTATIVE_ERA_VAR_NAME = "ICU_ENABLE_TENTATIVE_ERA"; + + +// Export the following for use by test code. +UBool JapaneseCalendar::enableTentativeEra() { + // Although start date of next Japanese era is planned ahead, a name of + // new era might not be available. This implementation allows tester to + // check a new era without era names by settings below (in priority order). + // By default, such tentative era is disabled. + + // 1. Environment variable ICU_ENABLE_TENTATIVE_ERA=true or false + + UBool includeTentativeEra = FALSE; + +#if U_PLATFORM_HAS_WINUWP_API == 1 + // UWP doesn't allow access to getenv(), but we can call GetEnvironmentVariableW to do the same thing. + UChar varName[26] = {}; + u_charsToUChars(TENTATIVE_ERA_VAR_NAME, varName, static_cast(uprv_strlen(TENTATIVE_ERA_VAR_NAME))); + WCHAR varValue[5] = {}; + DWORD ret = GetEnvironmentVariableW(reinterpret_cast(varName), varValue, UPRV_LENGTHOF(varValue)); + if ((ret == 4) && (_wcsicmp(varValue, L"true") == 0)) { + includeTentativeEra = TRUE; + } +#else + char *envVarVal = getenv(TENTATIVE_ERA_VAR_NAME); + if (envVarVal != NULL && uprv_stricmp(envVarVal, "true") == 0) { + includeTentativeEra = TRUE; + } +#endif + return includeTentativeEra; +} + + +// Initialize global Japanese era data +static void U_CALLCONV initializeEras(UErrorCode &status) { + gJapaneseEraRules = EraRules::createInstance("japanese", JapaneseCalendar::enableTentativeEra(), status); + if (U_FAILURE(status)) { + return; + } + gCurrentEra = gJapaneseEraRules->getCurrentEraIndex(); +} + +static void init(UErrorCode &status) { + umtx_initOnce(gJapaneseEraRulesInitOnce, &initializeEras, status); + ucln_i18n_registerCleanup(UCLN_I18N_JAPANESE_CALENDAR, japanese_calendar_cleanup); +} /* Some platforms don't like to export constants, like old Palm OS and some z/OS configurations. */ uint32_t JapaneseCalendar::getCurrentEra() { - return kCurrentEra; + return gCurrentEra; } JapaneseCalendar::JapaneseCalendar(const Locale& aLocale, UErrorCode& success) : GregorianCalendar(aLocale, success) { + init(success); setTimeInMillis(getNow(), success); // Call this again now that the vtable is set up properly. } @@ -306,6 +125,9 @@ JapaneseCalendar::~JapaneseCalendar() JapaneseCalendar::JapaneseCalendar(const JapaneseCalendar& source) : GregorianCalendar(source) { + UErrorCode status = U_ZERO_ERROR; + init(status); + U_ASSERT(U_SUCCESS(status)); } JapaneseCalendar& JapaneseCalendar::operator= ( const JapaneseCalendar& right) @@ -332,10 +154,14 @@ int32_t JapaneseCalendar::getDefaultMonthInYear(int32_t eyear) int32_t month = 0; // Find out if we are at the edge of an era - - if(eyear == kEraInfo[era].year) { + int32_t eraStart[3] = { 0,0,0 }; + UErrorCode status = U_ZERO_ERROR; + gJapaneseEraRules->getStartDate(era, eraStart, status); + U_ASSERT(U_SUCCESS(status)); + if(eyear == eraStart[0]) { // Yes, we're in the first year of this era. - return kEraInfo[era].month-1; + return eraStart[1] // month + -1; // return 0-based month } return month; @@ -346,9 +172,13 @@ int32_t JapaneseCalendar::getDefaultDayInMonth(int32_t eyear, int32_t month) int32_t era = internalGetEra(); int32_t day = 1; - if(eyear == kEraInfo[era].year) { - if(month == (kEraInfo[era].month-1)) { - return kEraInfo[era].day; + int32_t eraStart[3] = { 0,0,0 }; + UErrorCode status = U_ZERO_ERROR; + gJapaneseEraRules->getStartDate(era, eraStart, status); + U_ASSERT(U_SUCCESS(status)); + if(eyear == eraStart[0]) { + if(month == eraStart[1] - 1) { + return eraStart[2]; } } @@ -358,7 +188,7 @@ int32_t JapaneseCalendar::getDefaultDayInMonth(int32_t eyear, int32_t month) int32_t JapaneseCalendar::internalGetEra() const { - return internalGet(UCAL_ERA, kCurrentEra); + return internalGet(UCAL_ERA, gCurrentEra); } int32_t JapaneseCalendar::handleGetExtendedYear() @@ -369,12 +199,18 @@ int32_t JapaneseCalendar::handleGetExtendedYear() if (newerField(UCAL_EXTENDED_YEAR, UCAL_YEAR) == UCAL_EXTENDED_YEAR && newerField(UCAL_EXTENDED_YEAR, UCAL_ERA) == UCAL_EXTENDED_YEAR) { - year = internalGet(UCAL_EXTENDED_YEAR, kGregorianEpoch); - } else { - // Subtract one because year starts at 1 - year = internalGet(UCAL_YEAR) + kEraInfo[internalGetEra()].year - 1; - } - return year; + year = internalGet(UCAL_EXTENDED_YEAR, kGregorianEpoch); + } else { + UErrorCode status = U_ZERO_ERROR; + int32_t eraStartYear = gJapaneseEraRules->getStartYear(internalGet(UCAL_ERA, gCurrentEra), status); + U_ASSERT(U_SUCCESS(status)); + + // extended year is a gregorian year, where 1 = 1AD, 0 = 1BC, -1 = 2BC, etc + year = internalGet(UCAL_YEAR, 1) // pin to minimum of year 1 (first year) + + eraStartYear // add gregorian starting year + - 1; // Subtract one because year starts at 1 + } + return year; } @@ -383,79 +219,10 @@ void JapaneseCalendar::handleComputeFields(int32_t julianDay, UErrorCode& status //Calendar::timeToFields(theTime, quick, status); GregorianCalendar::handleComputeFields(julianDay, status); int32_t year = internalGet(UCAL_EXTENDED_YEAR); // Gregorian year + int32_t eraIdx = gJapaneseEraRules->getEraIndex(year, internalGet(UCAL_MONTH) + 1, internalGet(UCAL_DAY_OF_MONTH), status); - int32_t low = 0; - - // Short circuit for recent years. Most modern computations will - // occur in the current era and won't require the binary search. - // Note that if the year is == the current era year, then we use - // the binary search to handle the month/dom comparison. -#ifdef U_DEBUG_JCAL - fprintf(stderr, "== %d \n", year); -#endif - - if (year > kEraInfo[kCurrentEra].year) { - low = kCurrentEra; -#ifdef U_DEBUG_JCAL - fprintf(stderr, " low=%d (special)\n", low); -#endif - } else { - // Binary search - int32_t high = kEraCount; - -#ifdef U_DEBUG_JCAL - fprintf(stderr, " high=%d\n", high); -#endif - while (low < high - 1) { - int32_t i = (low + high) / 2; - int32_t diff = year - kEraInfo[i].year; - -#ifdef U_DEBUG_JCAL - fprintf(stderr, " d=%d low=%d, high=%d. Considering %d:M%d D%d Y%d. { we are ?:M%d D%d Y%d }\n", - diff,low, high, i, kEraInfo[i].month-1, kEraInfo[i].day, kEraInfo[i].year, internalGet(UCAL_MONTH), internalGet(UCAL_DATE),year); -#endif - - // If years are the same, then compare the months, and if those - // are the same, compare days of month. In the ERAS array - // months are 1-based for easier maintenance. - if (diff == 0) { - diff = internalGet(UCAL_MONTH) - (kEraInfo[i].month - 1); -#ifdef U_DEBUG_JCAL - fprintf(stderr, "diff now %d (M) = %d - %d - 1\n", diff, internalGet(UCAL_MONTH), kEraInfo[i].month); -#endif - if (diff == 0) { - diff = internalGet(UCAL_DATE) - kEraInfo[i].day; -#ifdef U_DEBUG_JCAL - fprintf(stderr, "diff now %d (D)\n", diff); -#endif - } - } - if (diff >= 0) { - low = i; - } else { - high = i; - } -#ifdef U_DEBUG_JCAL - fprintf(stderr, ". low=%d, high=%d, i=%d, diff=%d.. %d\n", low, high, i, diff, year); -#endif - - } - } - -#ifdef U_DEBUG_JCAL - fprintf(stderr, " low[era]=%d,.. %d\n", low, year); -#endif - // Now we've found the last era that starts before this date, so - // adjust the year to count from the start of that era. Note that - // all dates before the first era will fall into the first era by - // the algorithm. - - internalSet(UCAL_ERA, low); - internalSet(UCAL_YEAR, year - kEraInfo[low].year + 1); -#ifdef U_DEBUG_JCAL - fprintf(stderr, " Set ERA=%d, year=%d\n", low, year-kEraInfo[low].year+1); -#endif - + internalSet(UCAL_ERA, eraIdx); + internalSet(UCAL_YEAR, year - gJapaneseEraRules->getStartYear(eraIdx, status) + 1); } /* @@ -483,7 +250,7 @@ int32_t JapaneseCalendar::handleGetLimit(UCalendarDateFields field, ELimitType l if (limitType == UCAL_LIMIT_MINIMUM || limitType == UCAL_LIMIT_GREATEST_MINIMUM) { return 0; } - return kCurrentEra; + return gJapaneseEraRules->getNumberOfEras() - 1; // max known era, not gCurrentEra case UCAL_YEAR: { switch (limitType) { @@ -494,7 +261,12 @@ int32_t JapaneseCalendar::handleGetLimit(UCalendarDateFields field, ELimitType l return 1; case UCAL_LIMIT_COUNT: //added to avoid warning case UCAL_LIMIT_MAXIMUM: - return GregorianCalendar::handleGetLimit(UCAL_YEAR, UCAL_LIMIT_MAXIMUM) - kEraInfo[kCurrentEra].year; + { + UErrorCode status = U_ZERO_ERROR; + int32_t eraStartYear = gJapaneseEraRules->getStartYear(gCurrentEra, status); + U_ASSERT(U_SUCCESS(status)); + return GregorianCalendar::handleGetLimit(UCAL_YEAR, UCAL_LIMIT_MAXIMUM) - eraStartYear; + } default: return 1; // Error condition, invalid limitType } @@ -510,15 +282,18 @@ int32_t JapaneseCalendar::getActualMaximum(UCalendarDateFields field, UErrorCode if (U_FAILURE(status)) { return 0; // error case... any value } - if (era == kCurrentEra) { + if (era == gJapaneseEraRules->getNumberOfEras() - 1) { // // TODO: Investigate what value should be used here - revisit after 4.0. return handleGetLimit(UCAL_YEAR, UCAL_LIMIT_MAXIMUM); } else { - int32_t nextEraYear = kEraInfo[era + 1].year; - int32_t nextEraMonth = kEraInfo[era + 1].month; - int32_t nextEraDate = kEraInfo[era + 1].day; - - int32_t maxYear = nextEraYear - kEraInfo[era].year + 1; // 1-base + int32_t nextEraStart[3] = { 0,0,0 }; + gJapaneseEraRules->getStartDate(era + 1, nextEraStart, status); + int32_t nextEraYear = nextEraStart[0]; + int32_t nextEraMonth = nextEraStart[1]; // 1-base + int32_t nextEraDate = nextEraStart[2]; + + int32_t eraStartYear = gJapaneseEraRules->getStartYear(era, status); + int32_t maxYear = nextEraYear - eraStartYear + 1; // 1-base if (nextEraMonth == 1 && nextEraDate == 1) { // Subtract 1, because the next era starts at Jan 1 maxYear--; diff --git a/icuSources/i18n/japancal.h b/icuSources/i18n/japancal.h index f05b2ac9..25409d49 100644 --- a/icuSources/i18n/japancal.h +++ b/icuSources/i18n/japancal.h @@ -49,17 +49,32 @@ U_NAMESPACE_BEGIN * July 30, 1912 (Taisho), December 25, 1926 (Showa), and January 7, 1989 (Heisei). Constants * for these eras, suitable for use in the UCAL_ERA field, are provided * in this class. Note that the number used for each era is more or - * less arbitrary. Currently, the era starting in 1053 AD is era #0; however this - * may change in the future as we add more historical data. Use the predefined - * constants rather than using actual, absolute numbers. + * less arbitrary. Currently, the era starting in 645 AD is era #0; however this + * may change in the future. Use the predefined constants rather than using actual, + * absolute numbers. *

+ * Since ICU4C 63, start date of each era is imported from CLDR. CLDR era data + * may contain tentative era in near future with placeholder names. By default, + * such era data is not enabled. ICU4C users who want to test the behavior of + * the future era can enable this one of following settings (in the priority + * order): + *

    + *
  1. Environment variable ICU_ENABLE_TENTATIVE_ERA=true.
  2. + * * @internal */ class JapaneseCalendar : public GregorianCalendar { public: /** - * Useful constants for JapaneseCalendar. + * Check environment variable. + * @internal + */ + U_I18N_API static UBool U_EXPORT2 enableTentativeEra(void); + + /** + * Useful constants for JapaneseCalendar. + * Exported for use by test code. * @internal */ U_I18N_API static uint32_t U_EXPORT2 getCurrentEra(void); // the current era diff --git a/icuSources/i18n/smpdtfmt.cpp b/icuSources/i18n/smpdtfmt.cpp index f278efd9..9feee023 100644 --- a/icuSources/i18n/smpdtfmt.cpp +++ b/icuSources/i18n/smpdtfmt.cpp @@ -953,6 +953,8 @@ SimpleDateFormat::initialize(const Locale& locale, { if (U_FAILURE(status)) return; + parsePattern(); // Need this before initNumberFormatters(), to set fHasHanYearChar + // If the locale has @[....]numbers=hanidays we want to *delete* that (so it // it is not used for every field) and then set fDateOverride to "d=hanidays" // (as with std formats for zh@calendar=chinese) to use hanidays for d field. @@ -967,6 +969,14 @@ SimpleDateFormat::initialize(const Locale& locale, fDateOverride.setTo(hanidaysOverride,-1); } } + // Simple-minded hack to force Gannen year numbering for ja@calendar=japanese + // if format is non-numeric (includes å¹´) and fDateOverride is not already specified. + // Now this does get updated if applyPattern subsequently changes the pattern type. + if (fDateOverride.isBogus() && fHasHanYearChar && + fCalendar != nullptr && uprv_strcmp(fCalendar->getType(),"japanese") == 0 && + uprv_strcmp(fLocale.getLanguage(),"ja") == 0) { + fDateOverride.setTo(u"y=jpanyear", -1); + } // We don't need to check that the row count is >= 1, since all 2d arrays have at // least one row @@ -983,8 +993,6 @@ SimpleDateFormat::initialize(const Locale& locale, { status = U_MISSING_RESOURCE_ERROR; } - - parsePattern(); } /* Initialize the fields we use to disambiguate ambiguous years. Separate @@ -3923,6 +3931,42 @@ SimpleDateFormat::applyPattern(const UnicodeString& pattern) { fPattern = pattern; parsePattern(); + + // Hack to update use of Gannen year numbering for ja@calendar=japanese - + // use only if format is non-numeric (includes å¹´) and no other fDateOverride. + if (fCalendar != nullptr && uprv_strcmp(fCalendar->getType(),"japanese") == 0 && + uprv_strcmp(fLocale.getLanguage(),"ja") == 0) { + if (fDateOverride==UnicodeString(u"y=jpanyear") && !fHasHanYearChar) { + // Gannen numbering is set but new pattern should not use it, unset + // use procedure from adoptNumberFormat to clear overrides + if (fSharedNumberFormatters) { + freeSharedNumberFormatters(fSharedNumberFormatters); + fSharedNumberFormatters = NULL; + } + fDateOverride.setToBogus(); // record status + } else if (fDateOverride.isBogus() && fHasHanYearChar) { + // No current override (=> no Gannen numbering) but new pattern needs it; + // use procedures from initNUmberFormatters / adoptNumberFormat + umtx_lock(&LOCK); + if (fSharedNumberFormatters == NULL) { + fSharedNumberFormatters = allocSharedNumberFormatters(); + } + umtx_unlock(&LOCK); + if (fSharedNumberFormatters != NULL) { + Locale ovrLoc(fLocale.getLanguage(),fLocale.getCountry(),fLocale.getVariant(),"numbers=jpanyear"); + UErrorCode status = U_ZERO_ERROR; + const SharedNumberFormat *snf = createSharedNumberFormat(ovrLoc, status); + if (U_SUCCESS(status)) { + // Now that we have an appropriate number formatter, fill in the + // appropriate slot in the number formatters table. + UDateFormatField patternCharIndex = DateFormatSymbols::getPatternCharIndex(u'y'); + SharedObject::copyPtr(snf, fSharedNumberFormatters[patternCharIndex]); + snf->deleteIfZeroRefCount(); + fDateOverride.setTo(u"y=jpanyear", -1); // record status + } + } + } + } } //---------------------------------------------------------------------- @@ -4257,6 +4301,7 @@ SimpleDateFormat::tzFormat() const { void SimpleDateFormat::parsePattern() { fHasMinute = FALSE; fHasSecond = FALSE; + fHasHanYearChar = FALSE; int len = fPattern.length(); UBool inQuote = FALSE; @@ -4265,6 +4310,9 @@ void SimpleDateFormat::parsePattern() { if (ch == QUOTE) { inQuote = !inQuote; } + if (ch == 0x5E74) { // don't care whether this is inside quotes + fHasHanYearChar = TRUE; + } if (!inQuote) { if (ch == 0x6D) { // 0x6D == 'm' fHasMinute = TRUE; diff --git a/icuSources/i18n/ucln_in.h b/icuSources/i18n/ucln_in.h index 318eafc1..c17cd8e5 100644 --- a/icuSources/i18n/ucln_in.h +++ b/icuSources/i18n/ucln_in.h @@ -32,6 +32,7 @@ typedef enum ECleanupI18NType { UCLN_I18N_SPOOFDATA, UCLN_I18N_TRANSLITERATOR, UCLN_I18N_REGEX, + UCLN_I18N_JAPANESE_CALENDAR, UCLN_I18N_ISLAMIC_CALENDAR, UCLN_I18N_CHINESE_CALENDAR, UCLN_I18N_HEBREW_CALENDAR, diff --git a/icuSources/i18n/unicode/calendar.h b/icuSources/i18n/unicode/calendar.h index e6689219..098a824f 100644 --- a/icuSources/i18n/unicode/calendar.h +++ b/icuSources/i18n/unicode/calendar.h @@ -193,10 +193,22 @@ class BasicTimeZone; * Long.MIN_VALUE to Long.MAX_VALUE. * The new Calendar protocol specifies the * maximum range of supportable dates as those having Julian day numbers - * of -0x7F000000 to +0x7F000000. This - * corresponds to years from ~5,800,000 BCE to ~5,800,000 CE. Programmers - * should use the protected constants in Calendar to - * specify an extremely early or extremely late date.

    + * of `-0x7F000000` to `+0x7F000000`. This corresponds to years from ~5,800,000 BCE + * to ~5,800,000 CE. Programmers should use the protected constants in `Calendar` to + * specify an extremely early or extremely late date. + * + *

    + * The Japanese calendar uses a combination of era name and year number. + * When an emperor of Japan abdicates and a new emperor ascends the throne, + * a new era is declared and year number is reset to 1. Even if the date of + * abdication is scheduled ahead of time, the new era name might not be + * announced until just before the date. In such case, ICU4C may include + * a start date of future era without actual era name, but not enabled + * by default. ICU4C users who want to test the behavior of the future era + * can enable the tentative era by: + *

      + *
    • Environment variable ICU_ENABLE_TENTATIVE_ERA=true.
    • + *
    * * @stable ICU 2.0 */ @@ -904,7 +916,7 @@ public: /** * Sets the behavior for handling wall time repeating multiple times * at negative time zone offset transitions. For example, 1:30 AM on - * November 6, 2011 in US Eastern time (Ameirca/New_York) occurs twice; + * November 6, 2011 in US Eastern time (America/New_York) occurs twice; * 1:30 AM EDT, then 1:30 AM EST one hour later. When UCAL_WALLTIME_FIRST * is used, the wall time 1:30AM in this example will be interpreted as 1:30 AM EDT * (first occurrence). When UCAL_WALLTIME_LAST is used, it will be @@ -2181,7 +2193,7 @@ private: TimeZone* fZone; /** - * Option for rpeated wall time + * Option for repeated wall time * @see #setRepeatedWallTimeOption */ UCalendarWallTimeOption fRepeatedWallTime; @@ -2466,7 +2478,7 @@ private: BasicTimeZone* getBasicTimeZone() const; /** - * Find the previous zone transtion near the given time. + * Find the previous zone transition near the given time. * @param base The base time, inclusive * @param transitionTime Receives the result time * @param status The error status diff --git a/icuSources/i18n/unicode/smpdtfmt.h b/icuSources/i18n/unicode/smpdtfmt.h index 2d659c2d..d03cf661 100644 --- a/icuSources/i18n/unicode/smpdtfmt.h +++ b/icuSources/i18n/unicode/smpdtfmt.h @@ -1597,6 +1597,7 @@ private: UBool fHasMinute; UBool fHasSecond; + UBool fHasHanYearChar; // pattern contains the Han year character \u5E74 /** * Sets fHasMinutes and fHasSeconds. diff --git a/icuSources/i18n/unicode/ucal.h b/icuSources/i18n/unicode/ucal.h index cb89a74b..16c0bdf1 100644 --- a/icuSources/i18n/unicode/ucal.h +++ b/icuSources/i18n/unicode/ucal.h @@ -105,7 +105,7 @@ *

    * Note: for some non-Gregorian calendars, different * fields may be necessary for complete disambiguation. For example, a full - * specification of the historial Arabic astronomical calendar requires year, + * specification of the historical Arabic astronomical calendar requires year, * month, day-of-month and day-of-week in some cases. * *

    @@ -139,6 +139,19 @@ * For example, subtracting 5 days from the date September 12, 1996 * results in September 7, 1996. * + *

    + * The Japanese calendar uses a combination of era name and year number. + * When an emperor of Japan abdicates and a new emperor ascends the throne, + * a new era is declared and year number is reset to 1. Even if the date of + * abdication is scheduled ahead of time, the new era name might not be + * announced until just before the date. In such case, ICU4C may include + * a start date of future era without actual era name, but not enabled + * by default. ICU4C users who want to test the behavior of the future era + * can enable the tentative era by: + *

      + *
    • Environment variable ICU_ENABLE_TENTATIVE_ERA=true.
    • + *
    + * * @stable ICU 2.0 */ diff --git a/icuSources/i18n/unicode/udat.h b/icuSources/i18n/unicode/udat.h index d97f2cf2..9368ee78 100644 --- a/icuSources/i18n/unicode/udat.h +++ b/icuSources/i18n/unicode/udat.h @@ -482,6 +482,27 @@ typedef enum UDateFormatStyle { #define UDAT_HOUR_TZ "jz" #endif /* U_HIDE_DEPRECATED_API */ +#ifndef U_HIDE_INTERNAL_API +/** + * Constant for Unicode string name of new (in 2019) Japanese calendar era, + * root/English abbreviated version (ASCII-range characters). + * @internal + */ +#define JP_ERA_2019_ROOT "Reiwa" +/** + * Constant for Unicode string name of new (in 2019) Japanese calendar era, + * Japanese abbreviated version (Han, or fullwidth Latin for testing). + * @internal + */ +#define JP_ERA_2019_JA "\\u4EE4\\u548C" +/** + * Constant for Unicode string name of new (in 2019) Japanese calendar era, + * root and Japanese narrow version (ASCII-range characters). + * @internal + */ +#define JP_ERA_2019_NARROW "R" +#endif // U_HIDE_INTERNAL_API + /** * FieldPosition and UFieldPosition selectors for format fields * defined by DateFormat and UDateFormat. diff --git a/icuSources/test/cintltst/ccaltst.c b/icuSources/test/cintltst/ccaltst.c index 31bd63ab..abebc091 100644 --- a/icuSources/test/cintltst/ccaltst.c +++ b/icuSources/test/cintltst/ccaltst.c @@ -43,6 +43,7 @@ void TestGetTimeZoneIDByWindowsID(void); void TestClear(void); void TestPersianCalOverflow(void); void TestGetDayPeriods(); /* Apple-specific */ +void TestJCalHeiseiNextEra(); /* Apple-specific */ void addCalTest(TestNode** root); @@ -68,6 +69,7 @@ void addCalTest(TestNode** root) addTest(root, &TestClear, "tsformat/ccaltst/TestClear"); addTest(root, &TestPersianCalOverflow, "tsformat/ccaltst/TestPersianCalOverflow"); addTest(root, &TestGetDayPeriods, "tsformat/ccaltst/TestGetDayPeriods"); /* Apple-specific */ + addTest(root, &TestJCalHeiseiNextEra, "tsformat/ccaltst/TestJCalHeiseiNextEra"); /* Apple-specific */ } /* "GMT" */ @@ -2579,4 +2581,60 @@ void TestGetDayPeriods() { } } +void TestJCalHeiseiNextEra() { + UErrorCode status = U_ZERO_ERROR; + UCalendar *jCal = ucal_open(NULL, 0, "ja_JP@calendar=japanese", UCAL_DEFAULT, &status); + if ( U_FAILURE(status) ) { + log_data_err("FAIL: ucal_open for ja_JP@calendar=japanese, status %s\n", u_errorName(status)); + } else { + ucal_clear(jCal); // This sets to 1970, in Showa + int32_t sEra = ucal_get(jCal, UCAL_ERA, &status); // Don't assume Showa is 234 + if ( U_FAILURE(status) ) { + log_data_err("FAIL: ucal_get ERA for Showa, status %s\n", u_errorName(status)); + } else { + int32_t iEra, eYear; + int32_t startYears[] = { 1926, 1989, 2019, 0 }; + for (iEra = 1; iEra < 4; iEra++) { + status = U_ZERO_ERROR; + ucal_clear(jCal); + ucal_set(jCal, UCAL_ERA, sEra+iEra); + eYear = ucal_get(jCal, UCAL_EXTENDED_YEAR, &status); + if ( U_FAILURE(status) ) { + log_err("FAIL: set %d, ucal_get EXTENDED_YEAR, status %s\n", iEra, u_errorName(status)); + } else if (startYears[iEra] == 0) { + // invalid era, start should be in the far future with non-negative millis + if (eYear < 10000) { + log_err("ERROR: set %d, invalid era should have faraway start year, but get %d\n", iEra, eYear); + } + UDate date = ucal_getMillis(jCal, &status); + if ( U_FAILURE(status) ) { + log_err("FAIL: set %d, ucal_getMillis, status %s\n", iEra, u_errorName(status)); + } else if (date < 0) { + log_err("ERROR: set %d, ucal_getMillis should be positive, but get %.1f\n", iEra, date); + } + } else if (eYear != startYears[iEra]) { + log_err("ERROR: set %d, expected start year %d but get %d\n", iEra, startYears[iEra], eYear); + } else { + ucal_add(jCal, UCAL_ERA, 1, &status); + if ( U_FAILURE(status) ) { + log_err("FAIL: set %d, ucal_add ERA 1, status %s\n", iEra, u_errorName(status)); + } else { + eYear = ucal_get(jCal, UCAL_EXTENDED_YEAR, &status); + if ( U_FAILURE(status) ) { + log_err("FAIL: set %d then add ERA 1, ucal_get EXTENDED_YEAR, status %s\n", iEra, u_errorName(status)); + } else { + // If this is the last valid era, we expect adding an era to pin to the current era + int32_t nextEraStart = (startYears[iEra+1] == 0)? startYears[iEra]: startYears[iEra+1]; + if (eYear != nextEraStart) { + log_err("ERROR: set %d then add ERA 1, expected start year %d but get %d\n", iEra, nextEraStart, eYear); + } + } + } + } + } + } + ucal_close(jCal); + } +} + #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/test/cintltst/cdattst.c b/icuSources/test/cintltst/cdattst.c index ca4ae88d..c2a89205 100644 --- a/icuSources/test/cintltst/cdattst.c +++ b/icuSources/test/cintltst/cdattst.c @@ -45,6 +45,7 @@ static void TestContext(void); static void TestCalendarDateParse(void); static void TestParseErrorReturnValue(void); static void TestFormatForFields(void); +static void TestForceGannenNumbering(void); static void TestStandardPatterns(void); static void TestApplyPatnOverridesTimeSep(void); static void Test12HrFormats(void); @@ -71,6 +72,7 @@ void addDateForTest(TestNode** root) TESTCASE(TestOverrideNumberFormat); TESTCASE(TestParseErrorReturnValue); TESTCASE(TestFormatForFields); + TESTCASE(TestForceGannenNumbering); TESTCASE(TestStandardPatterns); TESTCASE(TestApplyPatnOverridesTimeSep); TESTCASE(Test12HrFormats); @@ -1937,6 +1939,44 @@ static void TestFormatForFields(void) { } } +static void TestForceGannenNumbering(void) { + UErrorCode status; + const char* locID = "ja_JP@calendar=japanese"; + UDate refDate = 600336000000.0; // 1989 Jan 9 Monday = Heisei 1 + const UChar* testSkeleton = u"yMMMd"; + + // Test Gannen year forcing + status = U_ZERO_ERROR; + UDateTimePatternGenerator* dtpgen = udatpg_open(locID, &status); + if (U_FAILURE(status)) { + log_data_err("Fail in udatpg_open locale %s: %s", locID, u_errorName(status)); + } else { + UChar pattern[kUbufMax]; + int32_t patlen = udatpg_getBestPattern(dtpgen, testSkeleton, -1, pattern, kUbufMax, &status); + if (U_FAILURE(status)) { + log_data_err("Fail in udatpg_getBestPattern locale %s: %s", locID, u_errorName(status)); + } else { + UDateFormat *testFmt = udat_open(UDAT_PATTERN, UDAT_PATTERN, locID, NULL, 0, pattern, patlen, &status); + if (U_FAILURE(status)) { + log_data_err("Fail in udat_open locale %s: %s", locID, u_errorName(status)); + } else { + UChar testString[kUbufMax]; + int32_t testStrLen = udat_format(testFmt, refDate, testString, kUbufMax, NULL, &status); + if (U_FAILURE(status)) { + log_err("Fail in udat_format locale %s: %s", locID, u_errorName(status)); + } else if (testStrLen < 3 || testString[2] != 0x5143) { + char bbuf[kBbufMax]; + UErrorCode convStatus = U_ZERO_ERROR; + u_strToUTF8(bbuf, kBbufMax, NULL, testString, testStrLen, &convStatus); + log_err("Formatting year 1 as Gannen, (conv status %s) got %s but expected 3rd char to be 0x5143", u_errorName(convStatus), bbuf); + } + udat_close(testFmt); + } + } + udatpg_close(dtpgen); + } +} + /* defined above static const UChar zoneGMT[] = { 0x47,0x4D,0x54,0 }; // "GMT" static const UDate date2015Feb25 = 1424841000000.0; // Wednesday, February 25, 2015 at 5:10:00 AM GMT diff --git a/icuSources/test/intltest/Makefile.in b/icuSources/test/intltest/Makefile.in index c2b38c68..4d3e1743 100644 --- a/icuSources/test/intltest/Makefile.in +++ b/icuSources/test/intltest/Makefile.in @@ -66,7 +66,7 @@ numbertest_affixutils.o numbertest_api.o numbertest_decimalquantity.o \ numbertest_modifiers.o numbertest_patternmodifier.o numbertest_patternstring.o \ numbertest_stringbuilder.o numbertest_stringsegment.o \ numbertest_parse.o numbertest_doubleconversion.o numbertest_skeletons.o \ -static_unisets_test.o numfmtdatadriventest.o +static_unisets_test.o numfmtdatadriventest.o erarulestest.o DEPS = $(OBJECTS:.o=.d) diff --git a/icuSources/test/intltest/dtifmtts.cpp b/icuSources/test/intltest/dtifmtts.cpp index 3d86aaa6..bf46098f 100644 --- a/icuSources/test/intltest/dtifmtts.cpp +++ b/icuSources/test/intltest/dtifmtts.cpp @@ -25,6 +25,7 @@ #include "cstr.h" #include "cstring.h" #include "simplethread.h" +#include "japancal.h" #include "unicode/gregocal.h" #include "unicode/dtintrv.h" #include "unicode/dtitvinf.h" @@ -405,640 +406,666 @@ void DateIntervalFormatTest::testAPI() { void DateIntervalFormatTest::testFormat() { // first item is date pattern // followed by a group of locale/from_data/to_data/skeleton/interval_data + // Note that from_data/to_data are specified using era names from root, for the calendar specified by locale. const char* DATA[] = { - "yyyy MM dd HH:mm:ss", + "GGGGG y MM dd HH:mm:ss", // pattern for from_data/to_data // test root - "root", "2007 11 10 10:10:10", "2007 12 10 10:10:10", "yM", "2007-11 \\u2013 2007-12", + "root", "CE 2007 11 10 10:10:10", "CE 2007 12 10 10:10:10", "yM", "2007-11 \\u2013 2007-12", // test 'H' and 'h', using availableFormat in fallback - "en", "2007 11 10 10:10:10", "2007 11 10 15:10:10", "Hms", "10:10:10\\u2009\\u2013\\u200915:10:10", - "en", "2007 11 10 10:10:10", "2007 11 10 15:10:10", "hms", "10:10:10 AM\\u2009\\u2013\\u20093:10:10 PM", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 10 15:10:10", "Hms", "10:10:10\\u2009\\u2013\\u200915:10:10", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 10 15:10:10", "hms", "10:10:10 AM\\u2009\\u2013\\u20093:10:10 PM", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "MMMM", "October 2007\\u2009\\u2013\\u2009October 2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "MMM", "Oct 2007\\u2009\\u2013\\u2009Oct 2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "MMMM", "October 2007\\u2009\\u2013\\u2009October 2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "MMM", "Oct 2007\\u2009\\u2013\\u2009Oct 2008", // test skeleton with both date and time - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMyhm", "Nov 10, 2007, 10:10 AM\\u2009\\u2013\\u2009Nov 20, 2007, 10:10 AM", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "dMMMyhm", "Nov 10, 2007, 10:10 AM\\u2009\\u2013\\u2009Nov 20, 2007, 10:10 AM", - "en", "2007 11 10 10:10:10", "2007 11 10 11:10:10", "dMMMyhm", "Nov 10, 2007, 10:10\\u2009\\u2013\\u200911:10 AM", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 10 11:10:10", "dMMMyhm", "Nov 10, 2007, 10:10\\u2009\\u2013\\u200911:10 AM", - "en", "2007 11 10 10:10:10", "2007 11 10 11:10:10", "hms", "10:10:10 AM\\u2009\\u2013\\u200911:10:10 AM", - "en", "2007 11 10 10:10:10", "2007 11 10 11:10:10", "Hms", "10:10:10\\u2009\\u2013\\u200911:10:10", - "en", "2007 11 10 20:10:10", "2007 11 10 21:10:10", "Hms", "20:10:10\\u2009\\u2013\\u200921:10:10", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 10 11:10:10", "hms", "10:10:10 AM\\u2009\\u2013\\u200911:10:10 AM", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 10 11:10:10", "Hms", "10:10:10\\u2009\\u2013\\u200911:10:10", + "en", "CE 2007 11 10 20:10:10", "CE 2007 11 10 21:10:10", "Hms", "20:10:10\\u2009\\u2013\\u200921:10:10", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EEEEdMMMMy", "Wednesday, October 10, 2007\\u2009\\u2013\\u2009Friday, October 10, 2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "EEEEdMMMMy", "Wednesday, October 10, 2007\\u2009\\u2013\\u2009Friday, October 10, 2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMMMMy", "October 10, 2007\\u2009\\u2013\\u2009October 10, 2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "dMMMMy", "October 10, 2007\\u2009\\u2013\\u2009October 10, 2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMMMM", "October 10, 2007\\u2009\\u2013\\u2009October 10, 2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "dMMMM", "October 10, 2007\\u2009\\u2013\\u2009October 10, 2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "MMMMy", "October 2007\\u2009\\u2013\\u2009October 2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "MMMMy", "October 2007\\u2009\\u2013\\u2009October 2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EEEEdMMMM", "Wednesday, October 10, 2007\\u2009\\u2013\\u2009Friday, October 10, 2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "EEEEdMMMM", "Wednesday, October 10, 2007\\u2009\\u2013\\u2009Friday, October 10, 2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EdMMMy", "Wed, Oct 10, 2007\\u2009\\u2013\\u2009Fri, Oct 10, 2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "EdMMMy", "Wed, Oct 10, 2007\\u2009\\u2013\\u2009Fri, Oct 10, 2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMMMy", "Oct 10, 2007\\u2009\\u2013\\u2009Oct 10, 2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "dMMMy", "Oct 10, 2007\\u2009\\u2013\\u2009Oct 10, 2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMMM", "Oct 10, 2007\\u2009\\u2013\\u2009Oct 10, 2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "dMMM", "Oct 10, 2007\\u2009\\u2013\\u2009Oct 10, 2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "MMMy", "Oct 2007\\u2009\\u2013\\u2009Oct 2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "MMMy", "Oct 2007\\u2009\\u2013\\u2009Oct 2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EdMMM", "Wed, Oct 10, 2007\\u2009\\u2013\\u2009Fri, Oct 10, 2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "EdMMM", "Wed, Oct 10, 2007\\u2009\\u2013\\u2009Fri, Oct 10, 2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EdMy", "Wed, 10/10/2007\\u2009\\u2013\\u2009Fri, 10/10/2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "EdMy", "Wed, 10/10/2007\\u2009\\u2013\\u2009Fri, 10/10/2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMy", "10/10/2007\\u2009\\u2013\\u200910/10/2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "dMy", "10/10/2007\\u2009\\u2013\\u200910/10/2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dM", "10/10/2007\\u2009\\u2013\\u200910/10/2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "dM", "10/10/2007\\u2009\\u2013\\u200910/10/2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "My", "10/2007\\u2009\\u2013\\u200910/2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "My", "10/2007\\u2009\\u2013\\u200910/2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EdM", "Wed, 10/10/2007\\u2009\\u2013\\u2009Fri, 10/10/2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "EdM", "Wed, 10/10/2007\\u2009\\u2013\\u2009Fri, 10/10/2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "d", "10/10/2007\\u2009\\u2013\\u200910/10/2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "d", "10/10/2007\\u2009\\u2013\\u200910/10/2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "Ed", "10 Wed\\u2009\\u2013\\u200910 Fri", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "Ed", "10 Wed\\u2009\\u2013\\u200910 Fri", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "y", "2007\\u2009\\u2013\\u20092008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "y", "2007\\u2009\\u2013\\u20092008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "M", "10/2007\\u2009\\u2013\\u200910/2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "M", "10/2007\\u2009\\u2013\\u200910/2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hm", "10/10/2007, 10:10 AM\\u2009\\u2013\\u200910/10/2008, 10:10 AM", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "Hm", "10/10/2007, 10:10\\u2009\\u2013\\u200910/10/2008, 10:10", - "en", "2007 10 10 20:10:10", "2008 10 10 20:10:10", "Hm", "10/10/2007, 20:10\\u2009\\u2013\\u200910/10/2008, 20:10", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "hm", "10/10/2007, 10:10 AM\\u2009\\u2013\\u200910/10/2008, 10:10 AM", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "Hm", "10/10/2007, 10:10\\u2009\\u2013\\u200910/10/2008, 10:10", + "en", "CE 2007 10 10 20:10:10", "CE 2008 10 10 20:10:10", "Hm", "10/10/2007, 20:10\\u2009\\u2013\\u200910/10/2008, 20:10", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hmv", "10/10/2007, 10:10 AM PT\\u2009\\u2013\\u200910/10/2008, 10:10 AM PT", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "hmv", "10/10/2007, 10:10 AM PT\\u2009\\u2013\\u200910/10/2008, 10:10 AM PT", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hmz", "10/10/2007, 10:10 AM PDT\\u2009\\u2013\\u200910/10/2008, 10:10 AM PDT", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "hmz", "10/10/2007, 10:10 AM PDT\\u2009\\u2013\\u200910/10/2008, 10:10 AM PDT", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "h", "10/10/2007, 10 AM\\u2009\\u2013\\u200910/10/2008, 10 AM", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "h", "10/10/2007, 10 AM\\u2009\\u2013\\u200910/10/2008, 10 AM", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hv", "10/10/2007, 10 AM PT\\u2009\\u2013\\u200910/10/2008, 10 AM PT", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "hv", "10/10/2007, 10 AM PT\\u2009\\u2013\\u200910/10/2008, 10 AM PT", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hz", "10/10/2007, 10 AM PDT\\u2009\\u2013\\u200910/10/2008, 10 AM PDT", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "hz", "10/10/2007, 10 AM PDT\\u2009\\u2013\\u200910/10/2008, 10 AM PDT", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EEddMMyyyy", "Wed, 10/10/2007\\u2009\\u2013\\u2009Fri, 10/10/2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "EEddMMyyyy", "Wed, 10/10/2007\\u2009\\u2013\\u2009Fri, 10/10/2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EddMMy", "Wed, 10/10/2007\\u2009\\u2013\\u2009Fri, 10/10/2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "EddMMy", "Wed, 10/10/2007\\u2009\\u2013\\u2009Fri, 10/10/2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hhmm", "10/10/2007, 10:10 AM\\u2009\\u2013\\u200910/10/2008, 10:10 AM", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "hhmm", "10/10/2007, 10:10 AM\\u2009\\u2013\\u200910/10/2008, 10:10 AM", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hhmmzz", "10/10/2007, 10:10 AM PDT\\u2009\\u2013\\u200910/10/2008, 10:10 AM PDT", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "hhmmzz", "10/10/2007, 10:10 AM PDT\\u2009\\u2013\\u200910/10/2008, 10:10 AM PDT", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hms", "10/10/2007, 10:10:10 AM\\u2009\\u2013\\u200910/10/2008, 10:10:10 AM", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "hms", "10/10/2007, 10:10:10 AM\\u2009\\u2013\\u200910/10/2008, 10:10:10 AM", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMMMMMy", "O 10, 2007\\u2009\\u2013\\u2009O 10, 2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "dMMMMMy", "O 10, 2007\\u2009\\u2013\\u2009O 10, 2008", - "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EEEEEdM", "W, 10/10/2007\\u2009\\u2013\\u2009F, 10/10/2008", + "en", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "EEEEEdM", "W, 10/10/2007\\u2009\\u2013\\u2009F, 10/10/2008", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EEEEdMMMMy", "Wednesday, October 10\\u2009\\u2013\\u2009Saturday, November 10, 2007", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "EEEEdMMMMy", "Wednesday, October 10\\u2009\\u2013\\u2009Saturday, November 10, 2007", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMMMy", "October 10\\u2009\\u2013\\u2009November 10, 2007", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "dMMMMy", "October 10\\u2009\\u2013\\u2009November 10, 2007", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMMM", "October 10\\u2009\\u2013\\u2009November 10", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "dMMMM", "October 10\\u2009\\u2013\\u2009November 10", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMMMy", "October\\u2009\\u2013\\u2009November 2007", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "MMMMy", "October\\u2009\\u2013\\u2009November 2007", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EEEEdMMMM", "Wednesday, October 10\\u2009\\u2013\\u2009Saturday, November 10", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "EEEEdMMMM", "Wednesday, October 10\\u2009\\u2013\\u2009Saturday, November 10", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EdMMMy", "Wed, Oct 10\\u2009\\u2013\\u2009Sat, Nov 10, 2007", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "EdMMMy", "Wed, Oct 10\\u2009\\u2013\\u2009Sat, Nov 10, 2007", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMMy", "Oct 10\\u2009\\u2013\\u2009Nov 10, 2007", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "dMMMy", "Oct 10\\u2009\\u2013\\u2009Nov 10, 2007", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMM", "Oct 10\\u2009\\u2013\\u2009Nov 10", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "dMMM", "Oct 10\\u2009\\u2013\\u2009Nov 10", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMMy", "Oct\\u2009\\u2013\\u2009Nov 2007", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "MMMy", "Oct\\u2009\\u2013\\u2009Nov 2007", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EdMMM", "Wed, Oct 10\\u2009\\u2013\\u2009Sat, Nov 10", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "EdMMM", "Wed, Oct 10\\u2009\\u2013\\u2009Sat, Nov 10", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EdMy", "Wed, 10/10/2007\\u2009\\u2013\\u2009Sat, 11/10/2007", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "EdMy", "Wed, 10/10/2007\\u2009\\u2013\\u2009Sat, 11/10/2007", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMy", "10/10/2007\\u2009\\u2013\\u200911/10/2007", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "dMy", "10/10/2007\\u2009\\u2013\\u200911/10/2007", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "My", "10/2007\\u2009\\u2013\\u200911/2007", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "My", "10/2007\\u2009\\u2013\\u200911/2007", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EdM", "Wed, 10/10\\u2009\\u2013\\u2009Sat, 11/10", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "EdM", "Wed, 10/10\\u2009\\u2013\\u2009Sat, 11/10", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "d", "10/10\\u2009\\u2013\\u200911/10", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "d", "10/10\\u2009\\u2013\\u200911/10", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "Ed", "10 Wed\\u2009\\u2013\\u200910 Sat", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "Ed", "10 Wed\\u2009\\u2013\\u200910 Sat", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "y", "2007", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "y", "2007", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "M", "10\\u2009\\u2013\\u200911", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "M", "10\\u2009\\u2013\\u200911", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMM", "Oct\\u2009\\u2013\\u2009Nov", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "MMM", "Oct\\u2009\\u2013\\u2009Nov", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMMM", "October\\u2009\\u2013\\u2009November", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "MMMM", "October\\u2009\\u2013\\u2009November", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hm", "10/10/2007, 10:10 AM\\u2009\\u2013\\u200911/10/2007, 10:10 AM", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "Hm", "10/10/2007, 10:10\\u2009\\u2013\\u200911/10/2007, 10:10", - "en", "2007 10 10 20:10:10", "2007 11 10 20:10:10", "Hm", "10/10/2007, 20:10\\u2009\\u2013\\u200911/10/2007, 20:10", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "hm", "10/10/2007, 10:10 AM\\u2009\\u2013\\u200911/10/2007, 10:10 AM", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "Hm", "10/10/2007, 10:10\\u2009\\u2013\\u200911/10/2007, 10:10", + "en", "CE 2007 10 10 20:10:10", "CE 2007 11 10 20:10:10", "Hm", "10/10/2007, 20:10\\u2009\\u2013\\u200911/10/2007, 20:10", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hmv", "10/10/2007, 10:10 AM PT\\u2009\\u2013\\u200911/10/2007, 10:10 AM PT", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "hmv", "10/10/2007, 10:10 AM PT\\u2009\\u2013\\u200911/10/2007, 10:10 AM PT", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hmz", "10/10/2007, 10:10 AM PDT\\u2009\\u2013\\u200911/10/2007, 10:10 AM PST", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "hmz", "10/10/2007, 10:10 AM PDT\\u2009\\u2013\\u200911/10/2007, 10:10 AM PST", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "h", "10/10/2007, 10 AM\\u2009\\u2013\\u200911/10/2007, 10 AM", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "h", "10/10/2007, 10 AM\\u2009\\u2013\\u200911/10/2007, 10 AM", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hv", "10/10/2007, 10 AM PT\\u2009\\u2013\\u200911/10/2007, 10 AM PT", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "hv", "10/10/2007, 10 AM PT\\u2009\\u2013\\u200911/10/2007, 10 AM PT", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hz", "10/10/2007, 10 AM PDT\\u2009\\u2013\\u200911/10/2007, 10 AM PST", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "hz", "10/10/2007, 10 AM PDT\\u2009\\u2013\\u200911/10/2007, 10 AM PST", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EEddMMyyyy", "Wed, 10/10/2007\\u2009\\u2013\\u2009Sat, 11/10/2007", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "EEddMMyyyy", "Wed, 10/10/2007\\u2009\\u2013\\u2009Sat, 11/10/2007", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EddMMy", "Wed, 10/10/2007\\u2009\\u2013\\u2009Sat, 11/10/2007", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "EddMMy", "Wed, 10/10/2007\\u2009\\u2013\\u2009Sat, 11/10/2007", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hhmmzz", "10/10/2007, 10:10 AM PDT\\u2009\\u2013\\u200911/10/2007, 10:10 AM PST", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "hhmmzz", "10/10/2007, 10:10 AM PDT\\u2009\\u2013\\u200911/10/2007, 10:10 AM PST", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hms", "10/10/2007, 10:10:10 AM\\u2009\\u2013\\u200911/10/2007, 10:10:10 AM", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "hms", "10/10/2007, 10:10:10 AM\\u2009\\u2013\\u200911/10/2007, 10:10:10 AM", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMMMMy", "O 10\\u2009\\u2013\\u2009N 10, 2007", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "dMMMMMy", "O 10\\u2009\\u2013\\u2009N 10, 2007", - "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EEEEEdM", "W, 10/10\\u2009\\u2013\\u2009S, 11/10", + "en", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "EEEEEdM", "W, 10/10\\u2009\\u2013\\u2009S, 11/10", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEdMMMMy", "Saturday, November 10\\u2009\\u2013\\u2009Tuesday, November 20, 2007", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "EEEEdMMMMy", "Saturday, November 10\\u2009\\u2013\\u2009Tuesday, November 20, 2007", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMMy", "November 10\\u2009\\u2013\\u200920, 2007", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "dMMMMy", "November 10\\u2009\\u2013\\u200920, 2007", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMM", "November 10\\u2009\\u2013\\u200920", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "dMMMM", "November 10\\u2009\\u2013\\u200920", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEdMMMM", "Saturday, November 10\\u2009\\u2013\\u2009Tuesday, November 20", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "EEEEdMMMM", "Saturday, November 10\\u2009\\u2013\\u2009Tuesday, November 20", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdMMMy", "Sat, Nov 10\\u2009\\u2013\\u2009Tue, Nov 20, 2007", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "EdMMMy", "Sat, Nov 10\\u2009\\u2013\\u2009Tue, Nov 20, 2007", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMy", "Nov 10\\u2009\\u2013\\u200920, 2007", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "dMMMy", "Nov 10\\u2009\\u2013\\u200920, 2007", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMM", "Nov 10\\u2009\\u2013\\u200920", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "dMMM", "Nov 10\\u2009\\u2013\\u200920", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "MMMy", "Nov 2007", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "MMMy", "Nov 2007", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdMMM", "Sat, Nov 10\\u2009\\u2013\\u2009Tue, Nov 20", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "EdMMM", "Sat, Nov 10\\u2009\\u2013\\u2009Tue, Nov 20", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdMy", "Sat, 11/10/2007\\u2009\\u2013\\u2009Tue, 11/20/2007", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "EdMy", "Sat, 11/10/2007\\u2009\\u2013\\u2009Tue, 11/20/2007", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMy", "11/10/2007\\u2009\\u2013\\u200911/20/2007", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "dMy", "11/10/2007\\u2009\\u2013\\u200911/20/2007", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dM", "11/10\\u2009\\u2013\\u200911/20", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "dM", "11/10\\u2009\\u2013\\u200911/20", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "My", "11/2007", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "My", "11/2007", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdM", "Sat, 11/10\\u2009\\u2013\\u2009Tue, 11/20", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "EdM", "Sat, 11/10\\u2009\\u2013\\u2009Tue, 11/20", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "d", "10\\u2009\\u2013\\u200920", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "d", "10\\u2009\\u2013\\u200920", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "Ed", "10 Sat\\u2009\\u2013\\u200920 Tue", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "Ed", "10 Sat\\u2009\\u2013\\u200920 Tue", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "y", "2007", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "y", "2007", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "M", "11", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "M", "11", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "MMM", "Nov", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "MMM", "Nov", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "MMMM", "November", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "MMMM", "November", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hm", "11/10/2007, 10:10 AM\\u2009\\u2013\\u200911/20/2007, 10:10 AM", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "Hm", "11/10/2007, 10:10\\u2009\\u2013\\u200911/20/2007, 10:10", - "en", "2007 11 10 20:10:10", "2007 11 20 20:10:10", "Hm", "11/10/2007, 20:10\\u2009\\u2013\\u200911/20/2007, 20:10", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "hm", "11/10/2007, 10:10 AM\\u2009\\u2013\\u200911/20/2007, 10:10 AM", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "Hm", "11/10/2007, 10:10\\u2009\\u2013\\u200911/20/2007, 10:10", + "en", "CE 2007 11 10 20:10:10", "CE 2007 11 20 20:10:10", "Hm", "11/10/2007, 20:10\\u2009\\u2013\\u200911/20/2007, 20:10", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hmv", "11/10/2007, 10:10 AM PT\\u2009\\u2013\\u200911/20/2007, 10:10 AM PT", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "hmv", "11/10/2007, 10:10 AM PT\\u2009\\u2013\\u200911/20/2007, 10:10 AM PT", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hmz", "11/10/2007, 10:10 AM PST\\u2009\\u2013\\u200911/20/2007, 10:10 AM PST", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "hmz", "11/10/2007, 10:10 AM PST\\u2009\\u2013\\u200911/20/2007, 10:10 AM PST", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "h", "11/10/2007, 10 AM\\u2009\\u2013\\u200911/20/2007, 10 AM", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "h", "11/10/2007, 10 AM\\u2009\\u2013\\u200911/20/2007, 10 AM", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hv", "11/10/2007, 10 AM PT\\u2009\\u2013\\u200911/20/2007, 10 AM PT", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "hv", "11/10/2007, 10 AM PT\\u2009\\u2013\\u200911/20/2007, 10 AM PT", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hz", "11/10/2007, 10 AM PST\\u2009\\u2013\\u200911/20/2007, 10 AM PST", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "hz", "11/10/2007, 10 AM PST\\u2009\\u2013\\u200911/20/2007, 10 AM PST", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEddMMyyyy", "Sat, 11/10/2007\\u2009\\u2013\\u2009Tue, 11/20/2007", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "EEddMMyyyy", "Sat, 11/10/2007\\u2009\\u2013\\u2009Tue, 11/20/2007", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EddMMy", "Sat, 11/10/2007\\u2009\\u2013\\u2009Tue, 11/20/2007", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "EddMMy", "Sat, 11/10/2007\\u2009\\u2013\\u2009Tue, 11/20/2007", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hhmm", "11/10/2007, 10:10 AM\\u2009\\u2013\\u200911/20/2007, 10:10 AM", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "hhmm", "11/10/2007, 10:10 AM\\u2009\\u2013\\u200911/20/2007, 10:10 AM", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hhmmzz", "11/10/2007, 10:10 AM PST\\u2009\\u2013\\u200911/20/2007, 10:10 AM PST", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "hhmmzz", "11/10/2007, 10:10 AM PST\\u2009\\u2013\\u200911/20/2007, 10:10 AM PST", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hms", "11/10/2007, 10:10:10 AM\\u2009\\u2013\\u200911/20/2007, 10:10:10 AM", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "Hms", "11/10/2007, 10:10:10\\u2009\\u2013\\u200911/20/2007, 10:10:10", - "en", "2007 11 10 20:10:10", "2007 11 20 20:10:10", "Hms", "11/10/2007, 20:10:10\\u2009\\u2013\\u200911/20/2007, 20:10:10", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "hms", "11/10/2007, 10:10:10 AM\\u2009\\u2013\\u200911/20/2007, 10:10:10 AM", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "Hms", "11/10/2007, 10:10:10\\u2009\\u2013\\u200911/20/2007, 10:10:10", + "en", "CE 2007 11 10 20:10:10", "CE 2007 11 20 20:10:10", "Hms", "11/10/2007, 20:10:10\\u2009\\u2013\\u200911/20/2007, 20:10:10", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMMMy", "N 10\\u2009\\u2013\\u200920, 2007", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "dMMMMMy", "N 10\\u2009\\u2013\\u200920, 2007", - "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEEdM", "S, 11/10\\u2009\\u2013\\u2009T, 11/20", + "en", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "EEEEEdM", "S, 11/10\\u2009\\u2013\\u2009T, 11/20", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEEEdMMMMy", "Wednesday, January 10, 2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "EEEEdMMMMy", "Wednesday, January 10, 2007", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMMMMy", "January 10, 2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "dMMMMy", "January 10, 2007", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMMMM", "January 10", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "dMMMM", "January 10", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "MMMMy", "January 2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "MMMMy", "January 2007", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEEEdMMMM", "Wednesday, January 10", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "EEEEdMMMM", "Wednesday, January 10", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EdMMMy", "Wed, Jan 10, 2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "EdMMMy", "Wed, Jan 10, 2007", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMMMy", "Jan 10, 2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "dMMMy", "Jan 10, 2007", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMMM", "Jan 10", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "dMMM", "Jan 10", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "MMMy", "Jan 2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "MMMy", "Jan 2007", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EdMMM", "Wed, Jan 10", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "EdMMM", "Wed, Jan 10", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMy", "1/10/2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "dMy", "1/10/2007", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dM", "1/10", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "dM", "1/10", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "My", "1/2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "My", "1/2007", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EdM", "Wed, 1/10", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "EdM", "Wed, 1/10", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "d", "10", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "d", "10", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "Ed", "10 Wed", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "Ed", "10 Wed", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "y", "2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "y", "2007", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "M", "1", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "M", "1", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "MMM", "Jan", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "MMM", "Jan", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "MMMM", "January", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "MMMM", "January", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hm", "10:00 AM\\u2009\\u2013\\u20092:10 PM", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "Hm", "10:00\\u2009\\u2013\\u200914:10", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "hm", "10:00 AM\\u2009\\u2013\\u20092:10 PM", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "Hm", "10:00\\u2009\\u2013\\u200914:10", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hmv", "10:00 AM\\u2009\\u2013\\u20092:10 PM PT", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "hmv", "10:00 AM\\u2009\\u2013\\u20092:10 PM PT", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hmz", "10:00 AM\\u2009\\u2013\\u20092:10 PM PST", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "hmz", "10:00 AM\\u2009\\u2013\\u20092:10 PM PST", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "h", "10 AM\\u2009\\u2013\\u20092 PM", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "H", "10\\u2009\\u2013\\u200914", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "h", "10 AM\\u2009\\u2013\\u20092 PM", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "H", "10\\u2009\\u2013\\u200914", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hz", "10 AM\\u2009\\u2013\\u20092 PM PST", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "hz", "10 AM\\u2009\\u2013\\u20092 PM PST", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEddMMyyyy", "Wed, 01/10/2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "EEddMMyyyy", "Wed, 01/10/2007", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EddMMy", "Wed, 01/10/2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "EddMMy", "Wed, 01/10/2007", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hhmm", "10:00 AM\\u2009\\u2013\\u20092:10 PM", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "HHmm", "10:00\\u2009\\u2013\\u200914:10", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "hhmm", "10:00 AM\\u2009\\u2013\\u20092:10 PM", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "HHmm", "10:00\\u2009\\u2013\\u200914:10", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hhmmzz", "10:00 AM\\u2009\\u2013\\u20092:10 PM PST", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "hhmmzz", "10:00 AM\\u2009\\u2013\\u20092:10 PM PST", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hms", "10:00:10 AM\\u2009\\u2013\\u20092:10:10 PM", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "Hms", "10:00:10\\u2009\\u2013\\u200914:10:10", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "hms", "10:00:10 AM\\u2009\\u2013\\u20092:10:10 PM", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "Hms", "10:00:10\\u2009\\u2013\\u200914:10:10", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMMMMMy", "J 10, 2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "dMMMMMy", "J 10, 2007", - "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEEEEdM", "W, 1/10", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "dMMMMy", "January 10, 2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "EEEEEdM", "W, 1/10", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "dMMMMy", "January 10, 2007", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "dMMMM", "January 10", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "dMMMM", "January 10", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "MMMMy", "January 2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "MMMMy", "January 2007", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EEEEdMMMM", "Wednesday, January 10", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "EEEEdMMMM", "Wednesday, January 10", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EdMMMy", "Wed, Jan 10, 2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "EdMMMy", "Wed, Jan 10, 2007", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "dMMMy", "Jan 10, 2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "dMMMy", "Jan 10, 2007", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "dMMM", "Jan 10", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "dMMM", "Jan 10", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EdMMM", "Wed, Jan 10", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "EdMMM", "Wed, Jan 10", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EdMy", "Wed, 1/10/2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "EdMy", "Wed, 1/10/2007", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "dMy", "1/10/2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "dMy", "1/10/2007", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "My", "1/2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "My", "1/2007", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EdM", "Wed, 1/10", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "EdM", "Wed, 1/10", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "d", "10", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "d", "10", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "y", "2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "y", "2007", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "M", "1", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "M", "1", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hm", "10:00\\u2009\\u2013\\u200910:20 AM", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "Hm", "10:00\\u2009\\u2013\\u200910:20", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "hm", "10:00\\u2009\\u2013\\u200910:20 AM", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "Hm", "10:00\\u2009\\u2013\\u200910:20", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hmz", "10:00\\u2009\\u2013\\u200910:20 AM PST", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "hmz", "10:00\\u2009\\u2013\\u200910:20 AM PST", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hv", "10 AM PT", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "hv", "10 AM PT", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EddMMy", "Wed, 01/10/2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "EddMMy", "Wed, 01/10/2007", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hhmm", "10:00\\u2009\\u2013\\u200910:20 AM", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "HHmm", "10:00\\u2009\\u2013\\u200910:20", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "hhmm", "10:00\\u2009\\u2013\\u200910:20 AM", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "HHmm", "10:00\\u2009\\u2013\\u200910:20", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hhmmzz", "10:00\\u2009\\u2013\\u200910:20 AM PST", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "hhmmzz", "10:00\\u2009\\u2013\\u200910:20 AM PST", - "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "dMMMMMy", "J 10, 2007", + "en", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "dMMMMMy", "J 10, 2007", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EEEEdMMMMy", "Wednesday, January 10, 2007", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "EEEEdMMMMy", "Wednesday, January 10, 2007", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "dMMMMy", "January 10, 2007", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "dMMMMy", "January 10, 2007", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "MMMMy", "January 2007", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "MMMMy", "January 2007", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EEEEdMMMM", "Wednesday, January 10", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "EEEEdMMMM", "Wednesday, January 10", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "dMMMy", "Jan 10, 2007", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "dMMMy", "Jan 10, 2007", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "dMMM", "Jan 10", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "dMMM", "Jan 10", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EdMMM", "Wed, Jan 10", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "EdMMM", "Wed, Jan 10", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EdMy", "Wed, 1/10/2007", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "EdMy", "Wed, 1/10/2007", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "dMy", "1/10/2007", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "dMy", "1/10/2007", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "My", "1/2007", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "My", "1/2007", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EdM", "Wed, 1/10", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "EdM", "Wed, 1/10", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "d", "10", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "d", "10", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "y", "2007", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "y", "2007", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "M", "1", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "M", "1", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "MMMM", "January", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "MMMM", "January", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hm", "10:10 AM", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "Hm", "10:10", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "hm", "10:10 AM", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "Hm", "10:10", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hmz", "10:10 AM PST", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "hmz", "10:10 AM PST", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "h", "10 AM", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "h", "10 AM", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hv", "10 AM PT", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "hv", "10 AM PT", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EEddMMyyyy", "Wed, 01/10/2007", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "EEddMMyyyy", "Wed, 01/10/2007", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hhmm", "10:10 AM", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "HHmm", "10:10", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "hhmm", "10:10 AM", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "HHmm", "10:10", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hhmmzz", "10:10 AM PST", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "hhmmzz", "10:10 AM PST", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "dMMMMMy", "J 10, 2007", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "dMMMMMy", "J 10, 2007", - "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EEEEEdM", "W, 1/10", + "en", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "EEEEEdM", "W, 1/10", - "zh", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EEEEdMMMMy", "2007\\u5e7410\\u670810\\u65e5\\u661f\\u671f\\u4e09\\u81f32008\\u5e7410\\u670810\\u65e5\\u661f\\u671f\\u4e94", + "zh", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "EEEEdMMMMy", "2007\\u5e7410\\u670810\\u65e5\\u661f\\u671f\\u4e09\\u81f32008\\u5e7410\\u670810\\u65e5\\u661f\\u671f\\u4e94", - "zh", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMMMy", "2007\\u5e7410\\u670810\\u65e5\\u81f311\\u670810\\u65e5", + "zh", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "dMMMMy", "2007\\u5e7410\\u670810\\u65e5\\u81f311\\u670810\\u65e5", - "zh", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMMMy", "2007\\u5e7410\\u6708\\u81f311\\u6708", + "zh", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "MMMMy", "2007\\u5e7410\\u6708\\u81f311\\u6708", - "zh", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hmv", "2007/10/10 \\u6D1B\\u6749\\u77F6\\u65F6\\u95F4 \\u4E0A\\u534810:10\\u2009\\u2013\\u20092007/11/10 \\u6D1B\\u6749\\u77F6\\u65F6\\u95F4 \\u4E0A\\u534810:10", + "zh", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "hmv", "2007/10/10 \\u6D1B\\u6749\\u77F6\\u65F6\\u95F4 \\u4E0A\\u534810:10\\u2009\\u2013\\u20092007/11/10 \\u6D1B\\u6749\\u77F6\\u65F6\\u95F4 \\u4E0A\\u534810:10", - "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEdMMMMy", "2007\\u5e7411\\u670810\\u65e5\\u661f\\u671f\\u516d\\u81f320\\u65e5\\u661f\\u671f\\u4e8c", + "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "EEEEdMMMMy", "2007\\u5e7411\\u670810\\u65e5\\u661f\\u671f\\u516d\\u81f320\\u65e5\\u661f\\u671f\\u4e8c", - "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMM", "11\\u670810\\u65e5\\u81f320\\u65e5", + "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "dMMMM", "11\\u670810\\u65e5\\u81f320\\u65e5", - "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "MMMMy", "2007\\u5E7411\\u6708", // (fixed expected result per ticket:6626:) + "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "MMMMy", "2007\\u5E7411\\u6708", // (fixed expected result per ticket:6626:) - "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEdMMMM", "11\\u670810\\u65e5\\u661f\\u671f\\u516d\\u81f320\\u65e5\\u661f\\u671f\\u4e8c", + "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "EEEEdMMMM", "11\\u670810\\u65e5\\u661f\\u671f\\u516d\\u81f320\\u65e5\\u661f\\u671f\\u4e8c", - "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdMy", "2007/11/10\\u5468\\u516d\\u81f32007/11/20\\u5468\\u4e8c", + "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "EdMy", "2007/11/10\\u5468\\u516d\\u81f32007/11/20\\u5468\\u4e8c", - "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dM", "11/10\\u2009\\u2013\\u200911/20", + "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "dM", "11/10\\u2009\\u2013\\u200911/20", - "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "My", "2007\\u5E7411\\u6708", + "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "My", "2007\\u5E7411\\u6708", - "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdM", "11/10\\u5468\\u516d\\u81f311/20\\u5468\\u4e8c", + "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "EdM", "11/10\\u5468\\u516d\\u81f311/20\\u5468\\u4e8c", - "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "y", "2007\\u5E74", // (fixed expected result per ticket:6626:) + "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "y", "2007\\u5E74", // (fixed expected result per ticket:6626:) - "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "M", "11\\u6708", + "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "M", "11\\u6708", - "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "MMM", "11\\u6708", // (fixed expected result per ticket:6626: and others) + "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "MMM", "11\\u6708", // (fixed expected result per ticket:6626: and others) - "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hmz", "2007/11/10 GMT-8 \\u4e0a\\u534810:10\\u2009\\u2013\\u20092007/11/20 GMT-8 \\u4e0a\\u534810:10", + "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "hmz", "2007/11/10 GMT-8 \\u4e0a\\u534810:10\\u2009\\u2013\\u20092007/11/20 GMT-8 \\u4e0a\\u534810:10", - "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "h", "2007/11/10 \\u4e0a\\u534810\\u65f6\\u2009\\u2013\\u20092007/11/20 \\u4e0a\\u534810\\u65f6", + "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "h", "2007/11/10 \\u4e0a\\u534810\\u65f6\\u2009\\u2013\\u20092007/11/20 \\u4e0a\\u534810\\u65f6", - "zh", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEEEdMMMMy", "2007\\u5e741\\u670810\\u65e5 \\u661f\\u671f\\u4e09", // (fixed expected result per ticket:6626:) + "zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "EEEEdMMMMy", "2007\\u5e741\\u670810\\u65e5 \\u661f\\u671f\\u4e09", // (fixed expected result per ticket:6626:) - "zh", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hm", "\\u4e0a\\u534810:00\\u81f3\\u4e0b\\u53482:10", + "zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "hm", "\\u4e0a\\u534810:00\\u81f3\\u4e0b\\u53482:10", - "zh", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hmz", "GMT-8\\u4e0a\\u534810:00\\u81f3\\u4e0b\\u53482:10", + "zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "hmz", "GMT-8\\u4e0a\\u534810:00\\u81f3\\u4e0b\\u53482:10", - "zh", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "h", "\\u4e0a\\u534810\\u65F6\\u81f3\\u4e0b\\u53482\\u65f6", + "zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "h", "\\u4e0a\\u534810\\u65F6\\u81f3\\u4e0b\\u53482\\u65f6", - "zh", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hv", "\\u6D1B\\u6749\\u77F6\\u65F6\\u95F4\\u4E0A\\u534810\\u65F6\\u81F3\\u4E0B\\u53482\\u65F6", + "zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "hv", "\\u6D1B\\u6749\\u77F6\\u65F6\\u95F4\\u4E0A\\u534810\\u65F6\\u81F3\\u4E0B\\u53482\\u65F6", - "zh", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hm", "\\u4e0a\\u534810:00\\u81f310:20", + "zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "hm", "\\u4e0a\\u534810:00\\u81f310:20", - "zh", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hmv", "\\u6D1B\\u6749\\u77F6\\u65F6\\u95F4\\u4E0A\\u534810:00\\u81F310:20", + "zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "hmv", "\\u6D1B\\u6749\\u77F6\\u65F6\\u95F4\\u4E0A\\u534810:00\\u81F310:20", - "zh", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hz", "GMT-8\\u4e0a\\u534810\\u65f6", + "zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "hz", "GMT-8\\u4e0a\\u534810\\u65f6", - "zh", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hm", "\\u4e0a\\u534810:10", + "zh", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "hm", "\\u4e0a\\u534810:10", - "zh", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "h", "\\u4e0a\\u534810\\u65f6", + "zh", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "h", "\\u4e0a\\u534810\\u65f6", - "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EEEEdMMMy", "Mittwoch, 10. Okt. 2007\\u2009\\u2013\\u2009Freitag, 10. Okt. 2008", + "de", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "EEEEdMMMy", "Mittwoch, 10. Okt. 2007\\u2009\\u2013\\u2009Freitag, 10. Okt. 2008", - "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMMM", "10. Okt. 2007\\u2009\\u2013\\u200910. Okt. 2008", + "de", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "dMMM", "10. Okt. 2007\\u2009\\u2013\\u200910. Okt. 2008", - "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "MMMy", "Okt. 2007\\u2009\\u2013\\u2009Okt. 2008", + "de", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "MMMy", "Okt. 2007\\u2009\\u2013\\u2009Okt. 2008", - "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EdMy", "Mi. 10.10.2007\\u2009\\u2013\\u2009Fr. 10.10.2008", + "de", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "EdMy", "Mi. 10.10.2007\\u2009\\u2013\\u2009Fr. 10.10.2008", - "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMy", "10.10.2007\\u2009\\u2013\\u200910.10.2008", + "de", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "dMy", "10.10.2007\\u2009\\u2013\\u200910.10.2008", - "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "My", "10.2007\\u2009\\u2013\\u200910.2008", + "de", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "My", "10.2007\\u2009\\u2013\\u200910.2008", - "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EdM", "Mi. 10.10.2007\\u2009\\u2013\\u2009Fr. 10.10.2008", + "de", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "EdM", "Mi. 10.10.2007\\u2009\\u2013\\u2009Fr. 10.10.2008", - "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "y", "2007\\u20132008", + "de", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "y", "2007\\u20132008", - "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "M", "10.2007\\u2009\\u2013\\u200910.2008", + "de", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "M", "10.2007\\u2009\\u2013\\u200910.2008", - "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hm", "10.10.2007, 10:10 AM\\u2009\\u2013\\u200910.10.2008, 10:10 AM", - "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "Hm", "10.10.2007, 10:10\\u2009\\u2013\\u200910.10.2008, 10:10", + "de", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "hm", "10.10.2007, 10:10 AM\\u2009\\u2013\\u200910.10.2008, 10:10 AM", + "de", "CE 2007 10 10 10:10:10", "CE 2008 10 10 10:10:10", "Hm", "10.10.2007, 10:10\\u2009\\u2013\\u200910.10.2008, 10:10", - "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EEEEdMMMy", "Mittwoch, 10. Okt.\\u2009\\u2013\\u2009Samstag, 10. Nov. 2007", + "de", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "EEEEdMMMy", "Mittwoch, 10. Okt.\\u2009\\u2013\\u2009Samstag, 10. Nov. 2007", - "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMM", "10. Okt.\\u2009\\u2013\\u200910. Nov.", + "de", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "dMMM", "10. Okt.\\u2009\\u2013\\u200910. Nov.", - "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMMy", "Okt.\\u2013Nov. 2007", + "de", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "MMMy", "Okt.\\u2013Nov. 2007", - "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EEEEdMMM", "Mittwoch, 10. Okt.\\u2009\\u2013\\u2009Samstag, 10. Nov.", + "de", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "EEEEdMMM", "Mittwoch, 10. Okt.\\u2009\\u2013\\u2009Samstag, 10. Nov.", - "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dM", "10.10.\\u2009\\u2013\\u200910.11.", + "de", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "dM", "10.10.\\u2009\\u2013\\u200910.11.", - "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "My", "10.2007\\u2009\\u2013\\u200911.2007", + "de", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "My", "10.2007\\u2009\\u2013\\u200911.2007", - "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "d", "10.10.\\u2009\\u2013\\u200910.11.", + "de", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "d", "10.10.\\u2009\\u2013\\u200910.11.", - "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "y", "2007", + "de", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "y", "2007", - "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMM", "Okt.\\u2013Nov.", + "de", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "MMM", "Okt.\\u2013Nov.", - "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hms", "10.10.2007, 10:10:10 AM\\u2009\\u2013\\u200910.11.2007, 10:10:10 AM", - "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "Hms", "10.10.2007, 10:10:10\\u2009\\u2013\\u200910.11.2007, 10:10:10", + "de", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "hms", "10.10.2007, 10:10:10 AM\\u2009\\u2013\\u200910.11.2007, 10:10:10 AM", + "de", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "Hms", "10.10.2007, 10:10:10\\u2009\\u2013\\u200910.11.2007, 10:10:10", - "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEdMMMy", "Samstag, 10.\\u2009\\u2013\\u2009Dienstag, 20. Nov. 2007", + "de", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "EEEEdMMMy", "Samstag, 10.\\u2009\\u2013\\u2009Dienstag, 20. Nov. 2007", - "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMy", "10.\\u201320. Nov. 2007", + "de", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "dMMMy", "10.\\u201320. Nov. 2007", - "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "MMMy", "Nov. 2007", + "de", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "MMMy", "Nov. 2007", - "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEdMMM", "Samstag, 10.\\u2009\\u2013\\u2009Dienstag, 20. Nov.", + "de", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "EEEEdMMM", "Samstag, 10.\\u2009\\u2013\\u2009Dienstag, 20. Nov.", - "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdMy", "Sa. 10.11.2007\\u2009\\u2013\\u2009Di. 20.11.2007", + "de", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "EdMy", "Sa. 10.11.2007\\u2009\\u2013\\u2009Di. 20.11.2007", - "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dM", "10.11.\\u2009\\u2013\\u200920.11.", + "de", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "dM", "10.11.\\u2009\\u2013\\u200920.11.", - "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "My", "11.2007", + "de", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "My", "11.2007", - "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "d", "10.\\u201320.", + "de", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "d", "10.\\u201320.", - "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "y", "2007", + "de", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "y", "2007", - "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hmv", "10.11.2007, 10:10 AM Los Angeles Zeit\\u2009\\u2013\\u200920.11.2007, 10:10 AM Los Angeles Zeit", + "de", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "hmv", "10.11.2007, 10:10 AM Los Angeles Zeit\\u2009\\u2013\\u200920.11.2007, 10:10 AM Los Angeles Zeit", - "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEEEdMMMy", "Mittwoch, 10. Jan. 2007", + "de", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "EEEEdMMMy", "Mittwoch, 10. Jan. 2007", - "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMMM", "10. Jan.", + "de", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "dMMM", "10. Jan.", - "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "MMMy", "Jan. 2007", + "de", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "MMMy", "Jan. 2007", - "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEEEdMMM", "Mittwoch, 10. Jan.", + "de", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "EEEEdMMM", "Mittwoch, 10. Jan.", /* Following is an important test, because the 'h' in 'Uhr' is interpreted as a pattern if not escaped properly. */ - "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "h", "10 AM\\u2009\\u2013\\u20092 PM", - "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "H", "10\\u201314 Uhr", + "de", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "h", "10 AM\\u2009\\u2013\\u20092 PM", + "de", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "H", "10\\u201314 Uhr", - "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EEEEdMMM", "Mittwoch, 10. Jan.", + "de", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "EEEEdMMM", "Mittwoch, 10. Jan.", - "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hmv", "10:00\\u201310:20 AM Los Angeles Zeit", + "de", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "hmv", "10:00\\u201310:20 AM Los Angeles Zeit", - "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hmz", "10:00\\u201310:20 AM GMT-8", + "de", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "hmz", "10:00\\u201310:20 AM GMT-8", - "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "h", "10 AM", - "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "H", "10 Uhr", + "de", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "h", "10 AM", + "de", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "H", "10 Uhr", - "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hz", "10 AM GMT-8", + "de", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "hz", "10 AM GMT-8", - "de", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EEEEdMMMy", "Mittwoch, 10. Jan. 2007", + "de", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "EEEEdMMMy", "Mittwoch, 10. Jan. 2007", - "de", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hmv", "10:10 AM Los Angeles Zeit", + "de", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "hmv", "10:10 AM Los Angeles Zeit", - "de", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hmz", "10:10 AM GMT-8", + "de", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "hmz", "10:10 AM GMT-8", - "de", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hv", "10 AM Los Angeles Zeit", + "de", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "hv", "10 AM Los Angeles Zeit", - "de", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hz", "10 AM GMT-8", + "de", "CE 2007 01 10 10:10:10", "CE 2007 01 10 10:10:20", "hz", "10 AM GMT-8", // Thai (default calendar buddhist) - "th", "2550 10 10 10:10:10", "2551 10 10 10:10:10", "EEEEdMMMy", "\\u0E27\\u0E31\\u0E19\\u0E1E\\u0E38\\u0E18\\u0E17\\u0E35\\u0E48 10 \\u0E15.\\u0E04. 2550 \\u2013 \\u0E27\\u0E31\\u0E19\\u0E28\\u0E38\\u0E01\\u0E23\\u0E4C\\u0E17\\u0E35\\u0E48 10 \\u0E15.\\u0E04. 2551", + "th", "BE 2550 10 10 10:10:10", "BE 2551 10 10 10:10:10", "EEEEdMMMy", "\\u0E27\\u0E31\\u0E19\\u0E1E\\u0E38\\u0E18\\u0E17\\u0E35\\u0E48 10 \\u0E15.\\u0E04. 2550 \\u2013 \\u0E27\\u0E31\\u0E19\\u0E28\\u0E38\\u0E01\\u0E23\\u0E4C\\u0E17\\u0E35\\u0E48 10 \\u0E15.\\u0E04. 2551", + + + "th", "BE 2550 10 10 10:10:10", "BE 2551 10 10 10:10:10", "dMMM", "10 \\u0E15.\\u0E04. 2550 \\u2013 10 \\u0E15.\\u0E04. 2551", + + "th", "BE 2550 10 10 10:10:10", "BE 2551 10 10 10:10:10", "MMMy", "\\u0E15.\\u0E04. 2550 \\u2013 \\u0E15.\\u0E04. 2551", + + + "th", "BE 2550 10 10 10:10:10", "BE 2551 10 10 10:10:10", "EdMy", "\\u0E1E. 10/10/2550 \\u2013 \\u0E28. 10/10/2551", + + "th", "BE 2550 10 10 10:10:10", "BE 2551 10 10 10:10:10", "dMy", "10/10/2550 \\u2013 10/10/2551", - "th", "2550 10 10 10:10:10", "2551 10 10 10:10:10", "dMMM", "10 \\u0E15.\\u0E04. 2550 \\u2013 10 \\u0E15.\\u0E04. 2551", + "th", "BE 2550 10 10 10:10:10", "BE 2551 10 10 10:10:10", "My", "10/2550 \\u2013 10/2551", - "th", "2550 10 10 10:10:10", "2551 10 10 10:10:10", "MMMy", "\\u0E15.\\u0E04. 2550 \\u2013 \\u0E15.\\u0E04. 2551", + "th", "BE 2550 10 10 10:10:10", "BE 2551 10 10 10:10:10", "EdM", "\\u0E1E. 10/10/2550 \\u2013 \\u0E28. 10/10/2551", - "th", "2550 10 10 10:10:10", "2551 10 10 10:10:10", "EdMy", "\\u0E1E. 10/10/2550 \\u2013 \\u0E28. 10/10/2551", + "th", "BE 2550 10 10 10:10:10", "BE 2551 10 10 10:10:10", "y", "2550\\u20132551", - "th", "2550 10 10 10:10:10", "2551 10 10 10:10:10", "dMy", "10/10/2550 \\u2013 10/10/2551", + "th", "BE 2550 10 10 10:10:10", "BE 2551 10 10 10:10:10", "M", "10/2550 \\u2013 10/2551", - "th", "2550 10 10 10:10:10", "2551 10 10 10:10:10", "My", "10/2550 \\u2013 10/2551", + "th", "BE 2550 10 10 10:10:10", "BE 2550 11 10 10:10:10", "EEEEdMMMy", "\\u0E27\\u0E31\\u0E19\\u0E1E\\u0E38\\u0E18\\u0E17\\u0E35\\u0E48 10 \\u0E15.\\u0E04. \\u2013 \\u0E27\\u0E31\\u0E19\\u0E40\\u0E2A\\u0E32\\u0E23\\u0E4C\\u0E17\\u0E35\\u0E48 10 \\u0E1E.\\u0E22. 2550", - "th", "2550 10 10 10:10:10", "2551 10 10 10:10:10", "EdM", "\\u0E1E. 10/10/2550 \\u2013 \\u0E28. 10/10/2551", + "th", "BE 2550 10 10 10:10:10", "BE 2550 11 10 10:10:10", "dMMM", "10 \\u0E15.\\u0E04. \\u2013 10 \\u0E1E.\\u0E22.", - "th", "2550 10 10 10:10:10", "2551 10 10 10:10:10", "y", "2550\\u20132551", + "th", "BE 2550 10 10 10:10:10", "BE 2550 11 10 10:10:10", "MMMy", "\\u0E15.\\u0E04.\\u2013\\u0E1E.\\u0E22. 2550", - "th", "2550 10 10 10:10:10", "2551 10 10 10:10:10", "M", "10/2550 \\u2013 10/2551", + "th", "BE 2550 10 10 10:10:10", "BE 2550 11 10 10:10:10", "dM", "10/10 \\u2013 10/11", + "th", "BE 2550 10 10 10:10:10", "BE 2550 11 10 10:10:10", "My", "10/2550 \\u2013 11/2550", - "th", "2550 10 10 10:10:10", "2550 11 10 10:10:10", "EEEEdMMMy", "\\u0E27\\u0E31\\u0E19\\u0E1E\\u0E38\\u0E18\\u0E17\\u0E35\\u0E48 10 \\u0E15.\\u0E04. \\u2013 \\u0E27\\u0E31\\u0E19\\u0E40\\u0E2A\\u0E32\\u0E23\\u0E4C\\u0E17\\u0E35\\u0E48 10 \\u0E1E.\\u0E22. 2550", + "th", "BE 2550 10 10 10:10:10", "BE 2550 11 10 10:10:10", "d", "10/10 \\u2013 10/11", - "th", "2550 10 10 10:10:10", "2550 11 10 10:10:10", "dMMM", "10 \\u0E15.\\u0E04. \\u2013 10 \\u0E1E.\\u0E22.", + "th", "BE 2550 10 10 10:10:10", "BE 2550 11 10 10:10:10", "y", "\\u0E1E.\\u0E28. 2550", - "th", "2550 10 10 10:10:10", "2550 11 10 10:10:10", "MMMy", "\\u0E15.\\u0E04.\\u2013\\u0E1E.\\u0E22. 2550", - "th", "2550 10 10 10:10:10", "2550 11 10 10:10:10", "dM", "10/10 \\u2013 10/11", + "th", "BE 2550 10 10 10:10:10", "BE 2550 11 10 10:10:10", "MMM", "\\u0E15.\\u0E04.\\u2013\\u0E1E.\\u0E22.", - "th", "2550 10 10 10:10:10", "2550 11 10 10:10:10", "My", "10/2550 \\u2013 11/2550", + // Tests for Japanese calendar with eras, including new era in 2019 (Heisei 31 through April 30, then new era) + "en-u-ca-japanese", "H 31 03 15 09:00:00", "H 31 04 15 09:00:00", "GyMMMd", "Mar 15\\u2009\\u2013\\u2009Apr 15, 31 Heisei", - "th", "2550 10 10 10:10:10", "2550 11 10 10:10:10", "d", "10/10 \\u2013 10/11", + "en-u-ca-japanese", "H 31 03 15 09:00:00", "H 31 04 15 09:00:00", "GGGGGyMd", "3/15/31\\u2009\\u2013\\u20094/15/31 H", - "th", "2550 10 10 10:10:10", "2550 11 10 10:10:10", "y", "\\u0E1E.\\u0E28. 2550", + "en-u-ca-japanese", "S 64 01 05 09:00:00", "H 1 01 15 09:00:00", "GyMMMd", "Jan 5, 64 Sh\\u014Dwa\\u2009\\u2013\\u2009Jan 15, 1 Heisei", + "en-u-ca-japanese", "S 64 01 05 09:00:00", "H 1 01 15 09:00:00", "GGGGGyMd", "1/5/64 S\\u2009\\u2013\\u20091/15/1 H", + + "en-u-ca-japanese", "H 31 04 15 09:00:00", JP_ERA_2019_NARROW " 1 05 15 09:00:00", "GyMMMd", "Apr 15, 31 Heisei\\u2009\\u2013\\u2009May 15, 1 " JP_ERA_2019_ROOT, - "th", "2550 10 10 10:10:10", "2550 11 10 10:10:10", "MMM", "\\u0E15.\\u0E04.\\u2013\\u0E1E.\\u0E22.", + "en-u-ca-japanese", "H 31 04 15 09:00:00", JP_ERA_2019_NARROW " 1 05 15 09:00:00", "GGGGGyMd", "4/15/31 H\\u2009\\u2013\\u20095/15/1 " JP_ERA_2019_NARROW, + + + "ja-u-ca-japanese", "H 31 03 15 09:00:00", "H 31 04 15 09:00:00", "GyMMMd", "\\u5E73\\u621031\\u5E743\\u670815\\u65E5\\uFF5E4\\u670815\\u65E5", + + "ja-u-ca-japanese", "H 31 03 15 09:00:00", "H 31 04 15 09:00:00", "GGGGGyMd", "H31/03/15\\uFF5E31/04/15", + + "ja-u-ca-japanese", "S 64 01 05 09:00:00", "H 1 01 15 09:00:00", "GyMMMd", "\\u662D\\u548C64\\u5E741\\u67085\\u65E5\\uFF5E\\u5E73\\u6210\\u5143\\u5E741\\u670815\\u65E5", + + "ja-u-ca-japanese", "S 64 01 05 09:00:00", "H 1 01 15 09:00:00", "GGGGGyMd", "S64/01/05\\uFF5EH1/01/15", + + "ja-u-ca-japanese", "H 31 04 15 09:00:00", JP_ERA_2019_NARROW " 1 05 15 09:00:00", "GGGGGyMd", "H31/04/15\\uFF5E" JP_ERA_2019_NARROW "1/05/15", "ar@calendar=islamic", "1438 10 10 10:10:10", "1438 10 20 10:10:10", "MMMd", "\\u0661\\u0660\\u2013\\u0662\\u0660 \\u0634\\u0648\\u0627\\u0644", }; @@ -1050,22 +1077,33 @@ void DateIntervalFormatTest::expect(const char** data, int32_t data_length) { int32_t i = 0; UErrorCode ec = U_ZERO_ERROR; UnicodeString str, str2; - const char* pattern = data[0]; - i++; + const char* pattern = data[i++]; while (i defCal(Calendar::createInstance(loc, ec)); + if (U_FAILURE(ec)) { + dataerrln("Calendar::createInstance fails for loc %s with: %s", locName, u_errorName(ec)); + return; + } + const char* calType = defCal->getType(); + + Locale refLoc("root"); + if (calType) { + refLoc.setKeywordValue("calendar", calType, ec); + } + SimpleDateFormat ref(pattern, refLoc, ec); logln( "case %d, locale: %s\n", (i-1)/5, locName); - if (U_FAILURE(ec)) { dataerrln("contruct SimpleDateFormat in expect failed: %s", u_errorName(ec)); return; } + // 'f' - const char* datestr = data[i++]; - const char* datestr_2 = data[i++]; logln("original date: %s - %s\n", datestr, datestr_2); UDate date = ref.parse(ctou(datestr), ec); if (!assertSuccess("parse 1st data in expect", ec)) return; diff --git a/icuSources/test/intltest/dtptngts.cpp b/icuSources/test/intltest/dtptngts.cpp index 62015551..43d3fb6d 100644 --- a/icuSources/test/intltest/dtptngts.cpp +++ b/icuSources/test/intltest/dtptngts.cpp @@ -202,9 +202,9 @@ void IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/) UnicodeString("23:58"), // 16: JJmm // ja@calendar=japanese // 6 ja@calendar=japanese - CharsToUnicodeString("H11/1"), // 00: yM -> GGGGGy/m + UnicodeString("H11/1"), // 00: yM -> GGGGGy/m CharsToUnicodeString("\\u5E73\\u621011\\u5E741\\u6708"), // 01: yMMM -> Gy\u5E74M\u6708 - CharsToUnicodeString("H11/1/13"), // 02: yMd -> GGGGGy/m/d + UnicodeString("H11/1/13"), // 02: yMd -> GGGGGy/m/d CharsToUnicodeString("\\u5E73\\u621011\\u5E741\\u670813\\u65E5"), // 03: yMMMd -> Gy\u5E74M\u6708d\u65E5 UnicodeString("1/13"), // 04: Md -> M/d CharsToUnicodeString("1\\u670813\\u65E5"), // 05: MMMd -> M\u6708d\u65E5 diff --git a/icuSources/test/intltest/erarulestest.cpp b/icuSources/test/intltest/erarulestest.cpp new file mode 100644 index 00000000..b550361b --- /dev/null +++ b/icuSources/test/intltest/erarulestest.cpp @@ -0,0 +1,130 @@ +// © 2018 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_FORMATTING + +#include "unicode/calendar.h" +#include "unicode/localpointer.h" +#include "unicode/unistr.h" +#include "erarules.h" +#include "erarulestest.h" + +void EraRulesTest::runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par*/) +{ + if (exec) { + logln("TestSuite EraRulesTest"); + } + TESTCASE_AUTO_BEGIN; + TESTCASE_AUTO(testAPIs); + TESTCASE_AUTO(testJapanese); + TESTCASE_AUTO_END; +} + +void EraRulesTest::testAPIs() { + const char * calTypes[] = { + "gregorian", + //"iso8601", + "buddhist", + "chinese", + "coptic", + "dangi", + "ethiopic", + "ethiopic-amete-alem", + "hebrew", + "indian", + "islamic", + "islamic-civil", + "islamic-rgsa", + "islamic-tbla", + "islamic-umalqura", + "japanese", + "persian", + "roc", + //"unknown", + NULL + }; + + for (int32_t i = 0; calTypes[i] != NULL; i++) { + UErrorCode status = U_ZERO_ERROR; + const char *calId = calTypes[i]; + + LocalPointer rules1(EraRules::createInstance(calId, FALSE, status)); + if (U_FAILURE(status)) { + errln(UnicodeString("Era rules for ") + calId + " is not available."); + continue; + } + + LocalPointer rules2(EraRules::createInstance(calId, TRUE, status)); + if (U_FAILURE(status)) { + errln(UnicodeString("Era rules for ") + calId + " (including tentative eras) is not available."); + continue; + } + + int32_t numEras1 = rules1->getNumberOfEras(); + if (numEras1 <= 0) { + errln(UnicodeString("Number of era rules for ") + calId + " is " + numEras1); + } + + int32_t numEras2 = rules2->getNumberOfEras(); + if (numEras2 < numEras1) { + errln(UnicodeString("Number of era including tentative eras is fewer than one without tentative eras in calendar: ") + + calId); + } + + LocalPointer cal(Calendar::createInstance("en", status)); + if (U_FAILURE(status)) { + errln("Failed to create a Calendar instance."); + continue; + } + int32_t currentIdx = rules1->getCurrentEraIndex(); + int32_t currentYear = cal->get(UCAL_YEAR, status); + int32_t idx = rules1->getEraIndex( + currentYear, cal->get(UCAL_MONTH, status) + 1, + cal->get(UCAL_DATE, status), status); + if (U_FAILURE(status)) { + errln("Error while getting index of era."); + continue; + } + if (idx != currentIdx) { + errln(UnicodeString("Current era index:") + currentIdx + " is different from era index of now:" + idx + + " in calendar:" + calId); + } + + int32_t eraStartYear = rules1->getStartYear(currentIdx, status); + if (U_FAILURE(status)) { + errln(UnicodeString("Failed to get the start year of era index: ") + currentIdx + " in calendar: " + calId); + } + if (currentYear < eraStartYear) { + errln(UnicodeString("Current era's start year is after the current year in calendar:") + calId); + } + } +} + +void EraRulesTest::testJapanese() { + const int32_t HEISEI = 235; // ICU4C does not define constants for eras + + UErrorCode status = U_ZERO_ERROR; + LocalPointer rules(EraRules::createInstance("japanese", TRUE, status)); + if (U_FAILURE(status)) { + errln("Failed to get era rules for Japanese calendar."); + return; + } + // Rules should have an era after Heisei + int32_t numRules = rules->getNumberOfEras(); + if (numRules <= HEISEI) { + errln("Era after Heisei is not available."); + return; + } + int postHeiseiStartYear = rules->getStartYear(HEISEI + 1, status); + if (U_FAILURE(status)) { + errln("Failed to get the start year of era after Heisei."); + } + if (postHeiseiStartYear != 2019) { + errln(UnicodeString("Era after Heisei should start in 2019, but got ") + postHeiseiStartYear); + } +} + +#endif /* #if !UCONFIG_NO_FORMATTING */ + diff --git a/icuSources/test/intltest/erarulestest.h b/icuSources/test/intltest/erarulestest.h new file mode 100644 index 00000000..28116af1 --- /dev/null +++ b/icuSources/test/intltest/erarulestest.h @@ -0,0 +1,23 @@ +// © 2018 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html + +#ifndef ERARULESTEST_H_ +#define ERARULESTEST_H_ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_FORMATTING + +#include "intltest.h" + +class EraRulesTest : public IntlTest { +public: + void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL); + +private: + void testAPIs(); + void testJapanese(); +}; + +#endif /* #if !UCONFIG_NO_FORMATTING */ +#endif /* ERARULESTEST_H_ */ diff --git a/icuSources/test/intltest/incaltst.cpp b/icuSources/test/intltest/incaltst.cpp index aeda1640..00491f23 100644 --- a/icuSources/test/intltest/incaltst.cpp +++ b/icuSources/test/intltest/incaltst.cpp @@ -12,6 +12,10 @@ #include "string.h" #include "unicode/locid.h" #include "japancal.h" +#include "unicode/localpointer.h" +#include "unicode/datefmt.h" +#include "unicode/smpdtfmt.h" +#include "unicode/dtptngen.h" #if !UCONFIG_NO_FORMATTING @@ -74,9 +78,10 @@ void IntlCalendarTest::runIndexedTest( int32_t index, UBool exec, const char* &n CASE(4,TestBuddhistFormat); CASE(5,TestJapaneseFormat); CASE(6,TestJapanese3860); - CASE(7,TestPersian); - CASE(8,TestPersianFormat); - CASE(9,TestTaiwan); + CASE(7,TestForceGannenNumbering); + CASE(8,TestPersian); + CASE(9,TestPersianFormat); + CASE(10,TestTaiwan); default: name = ""; break; } } @@ -599,6 +604,15 @@ void IntlCalendarTest::TestJapaneseFormat() { status = U_ZERO_ERROR; simpleTest(loc, expect, expectDate, status); + } + { // 1989 Jan 9 Monday = Heisei 1; full is Gy年M月d日EEEE => 平成元年1月9日月曜日 + UnicodeString expect = CharsToUnicodeString("\\u5E73\\u6210\\u5143\\u5E741\\u67089\\u65E5 \\u6708\\u66DC\\u65E5"); + UDate expectDate = 600336000000.0; + Locale loc("ja_JP@calendar=japanese"); + + status = U_ZERO_ERROR; + simpleTest(loc, expect, expectDate, status); + } { // This Feb 29th falls on a leap year by gregorian year, but not by Japanese year. UnicodeString expect = CharsToUnicodeString("\\u5EB7\\u6B632\\u5e742\\u670829\\u65e5 \\u65e5\\u66dc\\u65e5"); @@ -629,20 +643,20 @@ void IntlCalendarTest::TestJapanese3860() // Test parse with missing era (should default to current era, heisei) // Test parse with incomplete information logln("Testing parse w/ missing era..."); - SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("y.M.d"), Locale("ja_JP@calendar=japanese"), status); + SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("y/M/d"), Locale("ja_JP@calendar=japanese"), status); CHECK(status, "creating date format instance"); if(!fmt) { errln("Couldn't create en_US instance"); } else { UErrorCode s2 = U_ZERO_ERROR; cal2->clear(); - UnicodeString samplestr("1.1.9"); + UnicodeString samplestr("1/5/9"); logln(UnicodeString() + "Test Year: " + samplestr); aDate = fmt->parse(samplestr, s2); ParsePosition pp=0; fmt->parse(samplestr, *cal2, pp); - CHECK(s2, "parsing the 1.1.9 string"); - logln("*cal2 after 119 parse:"); + CHECK(s2, "parsing the 1/5/9 string"); + logln("*cal2 after 159 parse:"); str.remove(); fmt2->format(aDate, str); logln(UnicodeString() + "as Gregorian Calendar: " + str); @@ -653,7 +667,7 @@ void IntlCalendarTest::TestJapanese3860() int32_t expectYear = 1; int32_t expectEra = JapaneseCalendar::getCurrentEra(); if((gotYear!=1) || (gotEra != expectEra)) { - errln(UnicodeString("parse "+samplestr+" of 'y.m.d' as Japanese Calendar, expected year ") + expectYear + + errln(UnicodeString("parse "+samplestr+" of 'y/M/d' as Japanese Calendar, expected year ") + expectYear + UnicodeString(" and era ") + expectEra +", but got year " + gotYear + " and era " + gotEra + " (Gregorian:" + str +")"); } else { logln(UnicodeString() + " year: " + gotYear + ", era: " + gotEra); @@ -691,7 +705,7 @@ void IntlCalendarTest::TestJapanese3860() int32_t gotYear = cal2->get(UCAL_YEAR, s2); int32_t gotEra = cal2->get(UCAL_ERA, s2); int32_t expectYear = 1; - int32_t expectEra = 235; //JapaneseCalendar::kCurrentEra; + int32_t expectEra = JapaneseCalendar::getCurrentEra(); if((gotYear!=1) || (gotEra != expectEra)) { errln(UnicodeString("parse "+samplestr+" of 'y' as Japanese Calendar, expected year ") + expectYear + UnicodeString(" and era ") + expectEra +", but got year " + gotYear + " and era " + gotEra + " (Gregorian:" + str +")"); @@ -707,8 +721,71 @@ void IntlCalendarTest::TestJapanese3860() delete fmt2; } +void IntlCalendarTest::TestForceGannenNumbering() +{ + UErrorCode status; + const char* locID = "ja_JP@calendar=japanese"; + Locale loc(locID); + UDate refDate = 600336000000.0; // 1989 Jan 9 Monday = Heisei 1 + UnicodeString patText(u"Gy年M月d日",-1); + UnicodeString patNumr(u"GGGGGy/MM/dd",-1); + UnicodeString skelText(u"yMMMM",-1); + + // Test Gannen year forcing + status = U_ZERO_ERROR; + LocalPointer testFmt1(new SimpleDateFormat(patText, loc, status)); + LocalPointer testFmt2(new SimpleDateFormat(patNumr, loc, status)); + if (U_FAILURE(status)) { + dataerrln("Fail in new SimpleDateFormat locale %s: %s", locID, u_errorName(status)); + } else { + UnicodeString testString1, testString2; + testString1 = testFmt1->format(refDate, testString1); + if (testString1.length() < 3 || testString1.charAt(2) != 0x5143) { + errln(UnicodeString("Formatting year 1 in created text style, got " + testString1 + " but expected 3rd char to be 0x5143")); + } + testString2 = testFmt2->format(refDate, testString2); + if (testString2.length() < 2 || testString2.charAt(1) != 0x0031) { + errln(UnicodeString("Formatting year 1 in created numeric style, got " + testString2 + " but expected 2nd char to be 1")); + } + // Now switch the patterns and verify that Gannen use follows the pattern + testFmt1->applyPattern(patNumr); + testString1.remove(); + testString1 = testFmt1->format(refDate, testString1); + if (testString1.length() < 2 || testString1.charAt(1) != 0x0031) { + errln(UnicodeString("Formatting year 1 in applied numeric style, got " + testString1 + " but expected 2nd char to be 1")); + } + testFmt2->applyPattern(patText); + testString2.remove(); + testString2 = testFmt2->format(refDate, testString2); + if (testString2.length() < 3 || testString2.charAt(2) != 0x5143) { + errln(UnicodeString("Formatting year 1 in applied text style, got " + testString2 + " but expected 3rd char to be 0x5143")); + } + } - + // Test disabling of Gannen year forcing + status = U_ZERO_ERROR; + LocalPointer dtpgen(DateTimePatternGenerator::createInstance(loc, status)); + if (U_FAILURE(status)) { + dataerrln("Fail in DateTimePatternGenerator::createInstance locale %s: %s", locID, u_errorName(status)); + } else { + UnicodeString pattern = dtpgen->getBestPattern(skelText, status); + if (U_FAILURE(status)) { + dataerrln("Fail in DateTimePatternGenerator::getBestPattern locale %s: %s", locID, u_errorName(status)); + } else { + // Use override string of "" + LocalPointer testFmt3(new SimpleDateFormat(pattern, UnicodeString(""), loc, status)); + if (U_FAILURE(status)) { + dataerrln("Fail in new SimpleDateFormat locale %s: %s", locID, u_errorName(status)); + } else { + UnicodeString testString3; + testString3 = testFmt3->format(refDate, testString3); + if (testString3.length() < 3 || testString3.charAt(2) != 0x0031) { + errln(UnicodeString("Formatting year 1 with Gannen disabled, got " + testString3 + " but expected 3rd char to be 1")); + } + } + } + } +} /** * Verify the Persian Calendar. diff --git a/icuSources/test/intltest/incaltst.h b/icuSources/test/intltest/incaltst.h index 628b6e4c..2d42bcc8 100644 --- a/icuSources/test/intltest/incaltst.h +++ b/icuSources/test/intltest/incaltst.h @@ -34,6 +34,7 @@ public: void TestJapanese(void); void TestJapaneseFormat(void); void TestJapanese3860(void); + void TestForceGannenNumbering(void); void TestPersian(void); void TestPersianFormat(void); diff --git a/icuSources/test/intltest/intltest.vcxproj b/icuSources/test/intltest/intltest.vcxproj index 0d7bae44..8fd3414a 100644 --- a/icuSources/test/intltest/intltest.vcxproj +++ b/icuSources/test/intltest/intltest.vcxproj @@ -160,6 +160,7 @@ false + @@ -365,6 +366,7 @@ + diff --git a/icuSources/test/intltest/intltest.vcxproj.filters b/icuSources/test/intltest/intltest.vcxproj.filters index 4fea4428..5eca532d 100644 --- a/icuSources/test/intltest/intltest.vcxproj.filters +++ b/icuSources/test/intltest/intltest.vcxproj.filters @@ -72,7 +72,7 @@ break iteration - + spoof detection @@ -532,6 +532,9 @@ data & memory + + formatting + @@ -915,5 +918,8 @@ formatting + + formatting + diff --git a/icuSources/test/intltest/itformat.cpp b/icuSources/test/intltest/itformat.cpp index cea3249a..d450922e 100644 --- a/icuSources/test/intltest/itformat.cpp +++ b/icuSources/test/intltest/itformat.cpp @@ -60,6 +60,7 @@ #include "listformattertest.h" // ListFormatterTest #include "regiontst.h" // RegionTest #include "numbertest.h" // NumberTest +#include "erarulestest.h" // EraRulesTest extern IntlTest *createCompactDecimalFormatTest(); extern IntlTest *createGenderInfoTest(); @@ -215,6 +216,7 @@ void IntlTestFormat::runIndexedTest( int32_t index, UBool exec, const char* &nam break; TESTCLASS(50,NumberFormatDataDrivenTest); TESTCLASS(51,NumberTest); + TESTCLASS(52,EraRulesTest); default: name = ""; break; //needed to end loop } if (exec) { diff --git a/icuSources/test/testdata/rbbitst.txt b/icuSources/test/testdata/rbbitst.txt index 7d3257b7..175f3f09 100644 --- a/icuSources/test/testdata/rbbitst.txt +++ b/icuSources/test/testdata/rbbitst.txt @@ -1142,6 +1142,16 @@ Bangkok)• # •brk OK before 3063 •no brk before 301C •brk OK btw 2026 •no brk before FF01• •\u3084•\u3063•\u3071•\u308A\u0020•\u0031\u301C\u0020•\u2026•\u2026\u0020•u30A2\uFF01\u0020• +#################################################################################### +# +# Test cjdict for Reiwa (Apple added test) +# +#################################################################################### + + + +•日本<400>令和<400>時代<400> • + #################################################################################### # # Test Apple early change of lb class for 22EF diff --git a/icuSources/test/testdata/structLocale.txt b/icuSources/test/testdata/structLocale.txt index 0e26f5ad..a7aef3e8 100644 --- a/icuSources/test/testdata/structLocale.txt +++ b/icuSources/test/testdata/structLocale.txt @@ -20530,6 +20530,44 @@ structLocale:table(nofallback){ } } intervalFormats{ + Gy{ + G{""} + y{""} + } + GyM{ + G{""} + M{""} + y{""} + } + GyMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMM{ + G{""} + M{""} + y{""} + } + GyMMMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMMd{ + G{""} + M{""} + d{""} + y{""} + } + GyMd{ + G{""} + M{""} + d{""} + y{""} + } H{ H{""} } @@ -21446,6 +21484,44 @@ structLocale:table(nofallback){ } } intervalFormats{ + Gy{ + G{""} + y{""} + } + GyM{ + G{""} + M{""} + y{""} + } + GyMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMM{ + G{""} + M{""} + y{""} + } + GyMMMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMMd{ + G{""} + M{""} + d{""} + y{""} + } + GyMd{ + G{""} + M{""} + d{""} + y{""} + } H{ H{""} } @@ -21752,6 +21828,44 @@ structLocale:table(nofallback){ } } intervalFormats{ + Gy{ + G{""} + y{""} + } + GyM{ + G{""} + M{""} + y{""} + } + GyMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMM{ + G{""} + M{""} + y{""} + } + GyMMMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMMd{ + G{""} + M{""} + d{""} + y{""} + } + GyMd{ + G{""} + M{""} + d{""} + y{""} + } H{ H{""} } @@ -22766,6 +22880,44 @@ structLocale:table(nofallback){ } } intervalFormats{ + Gy{ + G{""} + y{""} + } + GyM{ + G{""} + M{""} + y{""} + } + GyMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMM{ + G{""} + M{""} + y{""} + } + GyMMMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMMd{ + G{""} + M{""} + d{""} + y{""} + } + GyMd{ + G{""} + M{""} + d{""} + y{""} + } H{ H{""} } @@ -23077,6 +23229,44 @@ structLocale:table(nofallback){ } } intervalFormats{ + Gy{ + G{""} + y{""} + } + GyM{ + G{""} + M{""} + y{""} + } + GyMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMM{ + G{""} + M{""} + y{""} + } + GyMMMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMMd{ + G{""} + M{""} + d{""} + y{""} + } + GyMd{ + G{""} + M{""} + d{""} + y{""} + } H{ H{""} } @@ -23345,6 +23535,44 @@ structLocale:table(nofallback){ } } intervalFormats{ + Gy{ + G{""} + y{""} + } + GyM{ + G{""} + M{""} + y{""} + } + GyMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMM{ + G{""} + M{""} + y{""} + } + GyMMMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMMd{ + G{""} + M{""} + d{""} + y{""} + } + GyMd{ + G{""} + M{""} + d{""} + y{""} + } H{ H{""} } @@ -23707,6 +23935,61 @@ structLocale:table(nofallback){ } } intervalFormats{ + GGGGGyM{ + G{""} + M{""} + y{""} + } + GGGGGyMEd{ + G{""} + M{""} + d{""} + y{""} + } + GGGGGyMd{ + G{""} + M{""} + d{""} + y{""} + } + Gy{ + G{""} + y{""} + } + GyM{ + G{""} + M{""} + y{""} + } + GyMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMM{ + G{""} + M{""} + y{""} + } + GyMMMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMMd{ + G{""} + M{""} + d{""} + y{""} + } + GyMd{ + G{""} + M{""} + d{""} + y{""} + } H{ H{""} } @@ -24160,6 +24443,44 @@ structLocale:table(nofallback){ } } intervalFormats{ + Gy{ + G{""} + y{""} + } + GyM{ + G{""} + M{""} + y{""} + } + GyMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMM{ + G{""} + M{""} + y{""} + } + GyMMMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMMd{ + G{""} + M{""} + d{""} + y{""} + } + GyMd{ + G{""} + M{""} + d{""} + y{""} + } H{ H{""} } @@ -24491,6 +24812,44 @@ structLocale:table(nofallback){ } } intervalFormats{ + Gy{ + G{""} + y{""} + } + GyM{ + G{""} + M{""} + y{""} + } + GyMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMM{ + G{""} + M{""} + y{""} + } + GyMMMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMMd{ + G{""} + M{""} + d{""} + y{""} + } + GyMd{ + G{""} + M{""} + d{""} + y{""} + } H{ H{""} } @@ -24777,6 +25136,44 @@ structLocale:table(nofallback){ } } intervalFormats{ + Gy{ + G{""} + y{""} + } + GyM{ + G{""} + M{""} + y{""} + } + GyMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMM{ + G{""} + M{""} + y{""} + } + GyMMMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMMd{ + G{""} + M{""} + d{""} + y{""} + } + GyMd{ + G{""} + M{""} + d{""} + y{""} + } H{ H{""} } @@ -25055,6 +25452,44 @@ structLocale:table(nofallback){ } } intervalFormats{ + Gy{ + G{""} + y{""} + } + GyM{ + G{""} + M{""} + y{""} + } + GyMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMM{ + G{""} + M{""} + y{""} + } + GyMMMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMMd{ + G{""} + M{""} + d{""} + y{""} + } + GyMd{ + G{""} + M{""} + d{""} + y{""} + } H{ H{""} } @@ -25333,6 +25768,44 @@ structLocale:table(nofallback){ } } intervalFormats{ + Gy{ + G{""} + y{""} + } + GyM{ + G{""} + M{""} + y{""} + } + GyMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMM{ + G{""} + M{""} + y{""} + } + GyMMMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMMd{ + G{""} + M{""} + d{""} + y{""} + } + GyMd{ + G{""} + M{""} + d{""} + y{""} + } H{ H{""} } @@ -25586,10 +26059,10 @@ structLocale:table(nofallback){ "", "", "", - "", - "", - "", - "", + "A2", + "A2", + "A2", + "A2", "", "A4", "A4", @@ -25834,6 +26307,7 @@ structLocale:table(nofallback){ "", "", "", + "", } wide{ "", @@ -26072,6 +26546,7 @@ structLocale:table(nofallback){ "", "", "", + "", } narrow{ "", @@ -26310,9 +26785,48 @@ structLocale:table(nofallback){ "", "", "", + "", } } intervalFormats{ + Gy{ + G{""} + y{""} + } + GyM{ + G{""} + M{""} + y{""} + } + GyMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMM{ + G{""} + M{""} + y{""} + } + GyMMMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMMd{ + G{""} + M{""} + d{""} + y{""} + } + GyMd{ + G{""} + M{""} + d{""} + y{""} + } H{ H{""} } @@ -26497,6 +27011,44 @@ structLocale:table(nofallback){ } } intervalFormats{ + Gy{ + G{""} + y{""} + } + GyM{ + G{""} + M{""} + y{""} + } + GyMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMM{ + G{""} + M{""} + y{""} + } + GyMMMEd{ + G{""} + M{""} + d{""} + y{""} + } + GyMMMd{ + G{""} + M{""} + d{""} + y{""} + } + GyMd{ + G{""} + M{""} + d{""} + y{""} + } H{ H{""} } -- 2.45.2