]> git.saurik.com Git - apple/icu.git/commitdiff
ICU-62135.0.1.tar.gz macos-10145 v62135.0.1
authorApple <opensource@apple.com>
Wed, 31 Jul 2019 06:16:41 +0000 (06:16 +0000)
committerApple <opensource@apple.com>
Wed, 31 Jul 2019 06:16:41 +0000 (06:16 +0000)
68 files changed:
icuSources/data/brkitr/dictionaries/cjdict.txt
icuSources/data/coll/ja.txt
icuSources/data/lang/en.txt
icuSources/data/locales/ar.txt
icuSources/data/locales/ast.txt
icuSources/data/locales/br.txt
icuSources/data/locales/bs_Cyrl.txt
icuSources/data/locales/cs.txt
icuSources/data/locales/de.txt
icuSources/data/locales/el.txt
icuSources/data/locales/en.txt
icuSources/data/locales/fa.txt
icuSources/data/locales/he.txt
icuSources/data/locales/hi.txt
icuSources/data/locales/hr.txt
icuSources/data/locales/id.txt
icuSources/data/locales/ja.txt
icuSources/data/locales/ko.txt
icuSources/data/locales/lo.txt
icuSources/data/locales/lt.txt
icuSources/data/locales/nb.txt
icuSources/data/locales/nl.txt
icuSources/data/locales/root.txt
icuSources/data/locales/ru.txt
icuSources/data/locales/sr.txt
icuSources/data/locales/sr_Latn.txt
icuSources/data/locales/sv.txt
icuSources/data/locales/th.txt
icuSources/data/locales/uk.txt
icuSources/data/locales/yue.txt
icuSources/data/locales/yue_Hans.txt
icuSources/data/locales/zh.txt
icuSources/data/locales/zh_Hant.txt
icuSources/data/misc/keyTypeData.txt
icuSources/data/misc/numberingSystems.txt
icuSources/data/misc/supplementalData.txt
icuSources/data/rbnf/ja.txt
icuSources/data/region/ja.txt
icuSources/i18n/Makefile.in
icuSources/i18n/dtitvfmt.cpp
icuSources/i18n/dtitvinf.cpp
icuSources/i18n/erarules.cpp [new file with mode: 0644]
icuSources/i18n/erarules.h [new file with mode: 0644]
icuSources/i18n/i18n.vcxproj
icuSources/i18n/i18n.vcxproj.filters
icuSources/i18n/i18n_uwp.vcxproj
icuSources/i18n/japancal.cpp
icuSources/i18n/japancal.h
icuSources/i18n/smpdtfmt.cpp
icuSources/i18n/ucln_in.h
icuSources/i18n/unicode/calendar.h
icuSources/i18n/unicode/smpdtfmt.h
icuSources/i18n/unicode/ucal.h
icuSources/i18n/unicode/udat.h
icuSources/test/cintltst/ccaltst.c
icuSources/test/cintltst/cdattst.c
icuSources/test/intltest/Makefile.in
icuSources/test/intltest/dtifmtts.cpp
icuSources/test/intltest/dtptngts.cpp
icuSources/test/intltest/erarulestest.cpp [new file with mode: 0644]
icuSources/test/intltest/erarulestest.h [new file with mode: 0644]
icuSources/test/intltest/incaltst.cpp
icuSources/test/intltest/incaltst.h
icuSources/test/intltest/intltest.vcxproj
icuSources/test/intltest/intltest.vcxproj.filters
icuSources/test/intltest/itformat.cpp
icuSources/test/testdata/rbbitst.txt
icuSources/test/testdata/structLocale.txt

index 34216976f658f7cccba7aa47e54bd55b4a45386a..b30a8637d621ee81285f5f47570e6df08fcc3bdd 100644 (file)
 令出惟行   164
 令叔 142
 令名 245
+令和 61
 令嗣 136
 令堂 127
 令太郎      245
index de42a2e68cd0f97e44cb65f8e60dc61cd5f438c1..69458d223651ab0faad038a966a0223a56d49e10 100644 (file)
@@ -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]<*亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙"
             }
index ebf366ab65e5f1d0a45bd1a32c282bf9c104ab27..20f738a20a5b4dda47757a733e6acbbbaaae82a2 100644 (file)
@@ -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}"}
index 376113d52a58d587d9985b16e8baf9c77a08f53b..4a0848ee8fbfff03e645b7fd6124c72012337ffc 100644 (file)
@@ -1711,6 +1711,7 @@ ar{
                     "تيشو",
                     "شووا",
                     "هيسي",
+                    "ريوا",
                 }
             }
         }
index c2f8950a09c41c96cf1ff3dc18ca6df944b7412b..fa381ed43953224feb32cb62a62ece6c203577e6 100644 (file)
@@ -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{
index 41100c2de9a4267a5420b433fc7bddfc1af36300..1203f5f3c84b87127025552345d85e4b62717b6f 100644 (file)
@@ -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{
index dca25e65ad550c8f055e85269a811a1efb595115..857ec811766d47218570bf95deeac8705efaaaec 100644 (file)
@@ -1035,6 +1035,7 @@ bs_Cyrl{
                     "Таишо",
                     "Шова",
                     "Хаисеи",
+                    "Reiwa",
                 }
             }
         }
index d4a5ea5c7f3e149b93cfd2fa94bdc40e8f696e86..6fe80a2e862f43f5939a35554593bf119f01b858 100644 (file)
@@ -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{
index 79041925507d4b2f59a50d41f238c05580be75cd..ec63cce3a8cfc2318823c068882ded96b933e89c 100644 (file)
@@ -1657,6 +1657,7 @@ de{
                     "Taishō",
                     "Shōwa",
                     "Heisei",
+                    "Reiwa",
                 }
             }
         }
index b8f73de1c6cc9578addda480cb112203866d1880..f18aa9b1bf4c517e99a2c9e7ac136e2e73292561 100644 (file)
@@ -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{
index d787a379844790116157a8eb9ebcfbb1463d6cc3..407f71acf025c65778d3ec84e21f2d0b73445c7b 100644 (file)
@@ -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"}
                 }
index 3b1587b1f36bdc8e968184e22d98e5d4beef3064..14c45255ffa89aa2209dc8cd5c5ddd7c2eeea3ef 100644 (file)
@@ -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)",
index a431a70f53d9ecae30b26a4a615fa815d1198d5d..2f1cb08706b9dec513aeec3298fdd985256e8433 100644 (file)
@@ -1837,6 +1837,7 @@ he{
                     "Taishō",
                     "Shōwa",
                     "Heisei",
+                    "Reiwa",
                 }
             }
         }
index fbb0a0abde5381382e7b657089bd1454016cbb69..54f922b80f48256d3d32dedcb801e1d461c527a3 100644 (file)
@@ -1260,7 +1260,8 @@ hi{
                     "मेजी",
                     "ताईशो",
                     "शोवा",
-                    "हेईसेई",
+                    "हेइसेइ",
+                    "रेइवा",
                 }
             }
         }
index 5608a853f57561a853060ae28c96db1cff1289cd..af61fa4d4cac4034be5630e7e08bc1d648b941ca 100644 (file)
@@ -1604,6 +1604,7 @@ hr{
                     "Taishō",
                     "Shōwa",
                     "Heisei",
+                    "Reiwa",
                 }
             }
         }
index 704d31b04eaf8961604bca25ce971b5ec7c1164c..7c686dfba85066a3fe911b317a2e8a3f23e4642d 100644 (file)
@@ -2189,6 +2189,7 @@ id{
                     "Taishō",
                     "Shōwa",
                     "Heisei",
+                    "Reiwa",
                 }
             }
         }
index 6853f175c755e32a2c21e5065eb643bfaeb4a3eb..8143ae334beb7cc13756058d6227a5164e7c6f2e 100644 (file)
@@ -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",
                 }
             }
         }
index babff13814a90b094325f92a5e4540dff865e213..0035ba536f3a7d077129b57555cd8eecff7b47ba 100644 (file)
@@ -1909,6 +1909,7 @@ ko{
                     "다이쇼",
                     "쇼와",
                     "헤이세이",
+                    "레이와",
                 }
             }
         }
index 6f40fbee80cb2bcca5ed588d750de4597e2c6326..f3b1732d37148edacb599d46d7d5053a720fc1cb 100644 (file)
@@ -1845,6 +1845,7 @@ lo{
                     "ໄຕໂຊ",
                     "ໂຊວາ",
                     "ຮີຊີ",
+                    "Reiwa",
                 }
             }
         }
index 457dc018e62f5b929ff6690b0b65bcef1c40704c..2a3e57c1e96a4a0c85973078d191b6253d242322 100644 (file)
@@ -2466,6 +2466,7 @@ lt{
                     "Taišo",
                     "Šova",
                     "Heisei",
+                    "Reiwa",
                 }
             }
         }
index 121d8ae9e7080c8b2c232bb247d5a92b3eaa689a..04e3d21a1a79629c1f9f7254c033419cbe4f5db1 100644 (file)
@@ -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{
index ab20bdc49e2e0a5a307507a1749538a1bd6cb35b..bd0478a7f76c3839c1976b48544fa9d25f869cf4 100644 (file)
@@ -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",
                 }
             }
         }
index 343bd4cdea19d98f3b1d40076ded7f31a002afd2..5f1d859fcdcd29adfd42c7eb8d670af27e70c6d6 100644 (file)
@@ -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"}
             }
index 2be4bcc035a75dbbb021e57d03f611f6ef8ce86c..a1005f0791f4978c4513d8f036b875af248c45d1 100644 (file)
@@ -1837,6 +1837,7 @@ ru{
                     "Эпоха Тайсьо",
                     "Сьова",
                     "Эпоха Хэйсэй",
+                    "Рэйва",
                 }
             }
         }
index faef61c4e4fc588c81adf91149e91da7667eabfe..a78f7bc52aa3748f972756cf64e1fba0cfff143e 100644 (file)
@@ -1252,6 +1252,7 @@ sr{
                     "Таишо",
                     "Шова",
                     "Хаисеи",
+                    "Реива",
                 }
             }
         }
index 57ceb03c99ef038571e9ddc594678de82a0cf0c1..5d352389db76ffb9aaf5d65dde750e7f4ca8c491 100644 (file)
@@ -1257,6 +1257,7 @@ sr_Latn{
                     "Taišo",
                     "Šova",
                     "Haisei",
+                    "Reiva",
                 }
             }
         }
index 327eea3cb90e5f57de93bdc11e83e04e8d1a87f7..91e809120c733c50f725fd1caaf51acd8215be51 100644 (file)
@@ -1658,6 +1658,7 @@ sv{
                     "Taishō",
                     "Shōwa",
                     "Heisei",
+                    "Reiwa",
                 }
             }
         }
index e55aaf7cce48a062e72addcde8f8e9084bf83203..5dc8b3c263add22df3b4414e87e56a4a56774593 100644 (file)
@@ -2297,6 +2297,7 @@ th{
                     "ทะอิโช",
                     "โชวะ",
                     "เฮเซ",
+                    "เรวะ",
                 }
             }
         }
index 6470cfad5c945f98817a6275674ab259f8b22f93..2bea5a87242722aa3169ed9a8c16e20837c54af3 100644 (file)
@@ -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{
index 363e89efea19d0df6bc5c1224df93f39375cbdde..4713c2d596c8ca364ab4bfb8ec3bf84942f5723e 100644 (file)
@@ -2411,6 +2411,7 @@ yue{
                     "大正",
                     "昭和",
                     "平成",
+                    "令和",
                 }
             }
         }
index b002eca996811aaba14dba2b6b5e1b96dd3e894d..fc510f55417144f0deb35e65901ffde062a45947 100644 (file)
@@ -2409,6 +2409,7 @@ yue_Hans{
                     "大正",
                     "昭和",
                     "平成",
+                    "令和",
                 }
             }
         }
index f1e5dceb298302c4c9fed685e6ee732516bdcf4f..59eb9083ba8c819a55f3404e1a15272b5fe7d4e4 100644 (file)
@@ -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{
                     "大正",
                     "昭和",
                     "平成",
+                    "令和",
                 }
             }
         }
index e7cd9bfb9e80854b632127e55890f991fe6d276d..aac91979f7b8e439d68e0aebcfcd0fba4af441ae 100644 (file)
@@ -5765,6 +5765,7 @@ zh_Hant{
                     "大正",
                     "昭和",
                     "平成",
+                    "令和",
                 }
                 narrow{
                     "大化",
@@ -6003,6 +6004,7 @@ zh_Hant{
                     "大正",
                     "昭和",
                     "平成",
+                    "令和",
                 }
                 wide{
                     "大化",
@@ -6241,6 +6243,7 @@ zh_Hant{
                     "大正",
                     "昭和",
                     "平成",
+                    "令和",
                 }
             }
             intervalFormats{
index af9cd8818e26e6e391b8822b89befebf70499238..54c89dca7a51b6c4a8b80cda15e897bad69d59c3 100644 (file)
@@ -628,6 +628,7 @@ keyTypeData:table(nofallback){
             java{""}
             jpan{""}
             jpanfin{""}
+            jpanyear{""}
             kali{""}
             khmr{""}
             knda{""}
index b1d6db0024e817d0302acb97de04e251462260ff..18b7317a0b0910f526958407562ada0c0c96a619 100644 (file)
@@ -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{"꤀꤁꤂꤃꤄꤅꤆꤇꤈꤉"}
index 5fc791b08f9412fd72a9763e52c5ee5c59fadb32..5b569d3ee86a9f9246117b73df72ee322232821d 100644 (file)
@@ -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,
                     }
                 }
             }
index db01443a8bfcbdabcafecf96831bdcd91a729348..0ddc6f128efe7f824228a3eca3dbd2dc781d6229 100644 (file)
@@ -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"}
 }
index a3871e7a9d817ff90a376e14e5fede57078e2b0c..244e14aec0d132d4bf795698d3270ebc7e6a97f2 100644 (file)
@@ -81,7 +81,7 @@ ja{
         CK{"クック諸島"}
         CL{"チリ"}
         CM{"カメルーン"}
-        CN{"中国大陸"}
+        CN{"中国本土"}
         CO{"コロンビア"}
         CP{"クリッパートン島"}
         CR{"コスタリカ"}
index 7bdf99ad9f48ff934b6d86b451d3e115abd7a729..cd33045a54c1e89bc1b2999c1fb01849a5bd992d 100644 (file)
@@ -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
index ab882cabcb1746f7c3893f6288052b507f37f7b8..1a3cc986f2c65ff38e7755fec0686d569d930c7d 100644 (file)
@@ -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);
index c863a683a5c2f8d0475e6071df3cc0ea67cab6f3..d00668be1fb3302f602c01f7baed51d0a8300d4b 100644 (file)
@@ -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 (file)
index 0000000..474ebba
--- /dev/null
@@ -0,0 +1,311 @@
+// © 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#include <utility>
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
+#include <stdlib.h>
+#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<int32_t>& 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<int32_t> startDates(static_cast<int32_t *>(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 <rdar://problem/49714633>)
+    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 (file)
index 0000000..620f27c
--- /dev/null
@@ -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<int32_t>;
+template class U_I18N_API LocalMemory<int32_t>;
+#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<int32_t>& eraStartDates, int32_t numEra);
+
+    void initCurrentEra();
+
+    LocalMemory<int32_t> startDates;
+    int32_t numEras;
+    int32_t currentEra;
+};
+
+U_NAMESPACE_END
+#endif /* #if !UCONFIG_NO_FORMATTING */
+#endif /* ERARULES_H_ */
index 0af58a630416019af0534ea9b674e9ab60a67804..fdc65a6e1f125b366ce02d6abf86355bd3edde9b 100644 (file)
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
+    <ClCompile Include="erarules.cpp" />
     <ClCompile Include="region.cpp" />
     <ClCompile Include="uregion.cpp" />
     <ClCompile Include="alphaindex.cpp" />
     <ClInclude Include="collationtailoring.h" />
     <ClInclude Include="collationweights.h" />
     <ClInclude Include="dayperiodrules.h" />
+    <ClInclude Include="erarules.h" />
     <ClInclude Include="numsys_impl.h" />
     <ClInclude Include="region_impl.h" />
     <ClInclude Include="selfmtimpl.h" />
index 494c8e166388eef13f4345773a2f6b681952557e..9146cdfa72fdd945238103209aac67a42267730a 100644 (file)
     <ClCompile Include="dayperiodrules.cpp">
       <Filter>formatting</Filter>
     </ClCompile>
+    <ClCompile Include="erarules.cpp">
+      <Filter>formatting</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="bocsu.cpp">
     <ClInclude Include="utf8collationiterator.h">
       <Filter>collation</Filter>
     </ClInclude>
+    <ClInclude Include="erarules.h">
+      <Filter>formatting</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="i18n.rc">
index 6379486def1c91c5b3ae8ee7bf5174c08c109a3d..adb92b5195410e5585498379132cda1bd1c75154 100644 (file)
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
+    <ClCompile Include="erarules.cpp" />
     <ClCompile Include="region.cpp" />
     <ClCompile Include="uregion.cpp" />
     <ClCompile Include="alphaindex.cpp" />
     <ClInclude Include="collationtailoring.h" />
     <ClInclude Include="collationweights.h" />
     <ClInclude Include="dayperiodrules.h" />
+    <ClInclude Include="erarules.h" />
     <ClInclude Include="numsys_impl.h" />
     <ClInclude Include="region_impl.h" />
     <ClInclude Include="selfmtimpl.h" />
index 17b4e0764ddc8d1978550616f2118a00ecd37e73..0fead5936885251f40d0b4b6e810245cf80ab1ec 100644 (file)
 #include "unicode/utypes.h"
 
 #if !UCONFIG_NO_FORMATTING
-
+#if U_PLATFORM_HAS_WINUWP_API == 0
+#include <stdlib.h> // 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 <windows.h>
+#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 <stdio.h>
-#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<int32_t>(uprv_strlen(TENTATIVE_ERA_VAR_NAME)));
+    WCHAR varValue[5] = {};
+    DWORD ret = GetEnvironmentVariableW(reinterpret_cast<WCHAR*>(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; // <rdar://problem/49714633> 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) { // <rdar://problem/49714633>
             // 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--;
index f05b2ac9b779eb0caaef19bce84380ba9e54de74..25409d495e099fc43a40683210ede854fa8f6aaf 100644 (file)
@@ -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 <code>UCAL_ERA</code> field, are provided
  * in this class.  Note that the <em>number</em> 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.
  * <p>
+ * 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):
+ * <ol>
+ * <li>Environment variable <code>ICU_ENABLE_TENTATIVE_ERA=true</code>.</li>
+ * </nl>
  * @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
index f278efd9c61a94f314e5ca21d8ca159e885fa8ea..9feee023a1d24ee6710e7b07c5ecd4e3c86fbc7d 100644 (file)
@@ -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;
index 318eafc143c9686a1c06c3bbcb6cdc9b4a1edb45..c17cd8e5245e03f5a73bcce53d95b8e21952859c 100644 (file)
@@ -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,
index e66892190851be20ad8858f577869bed827fbbf5..098a824fe5fcc6b3154207fe3a0e981fed8766ec 100644 (file)
@@ -193,10 +193,22 @@ class BasicTimeZone;
  * <code>Long.MIN_VALUE</code> to <code>Long.MAX_VALUE</code>.
  * The new <code>Calendar</code> protocol specifies the
  * maximum range of supportable dates as those having Julian day numbers
- * of <code>-0x7F000000</code> to <code>+0x7F000000</code>. This
- * corresponds to years from ~5,800,000 BCE to ~5,800,000 CE. Programmers
- * should use the protected constants in <code>Calendar</code> to
- * specify an extremely early or extremely late date.</p>
+ * 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.
+ *
+ * <p>
+ * 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:
+ * <ul>
+ * <li>Environment variable <code>ICU_ENABLE_TENTATIVE_ERA=true</code>.</li>
+ * </ul>
  *
  * @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 <code>UCAL_WALLTIME_FIRST</code>
      * is used, the wall time 1:30AM in this example will be interpreted as 1:30 AM EDT
      * (first occurrence). When <code>UCAL_WALLTIME_LAST</code> 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
index 2d659c2d2ac8530435ec95aac417f1c133a63db1..d03cf6617eca1b0ae6c805967f685d7d884393d8 100644 (file)
@@ -1597,6 +1597,7 @@ private:
 
     UBool                fHasMinute;
     UBool                fHasSecond;
+    UBool                fHasHanYearChar; // pattern contains the Han year character \u5E74
 
     /**
      * Sets fHasMinutes and fHasSeconds.
index cb89a74b1866c6ce49c59a377bdd86773f9ce675..16c0bdf1b29e53a00861f32ba167f3f0580ed9ad 100644 (file)
  * <p>
  * <strong>Note:</strong> 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 <em>and</em> day-of-week in some cases.
  *
  * <p>
  * For example, subtracting 5 days from the date <code>September 12, 1996</code>
  * results in <code>September 7, 1996</code>.
  *
+ * <p>
+ * 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:
+ * <ul>
+ * <li>Environment variable <code>ICU_ENABLE_TENTATIVE_ERA=true</code>.</li>
+ * </ul>
+ *
  * @stable ICU 2.0
  */
 
index d97f2cf220bf74ae0aa1f0c83a45c0461a377b8c..9368ee78eb611062dce87b31e06d5a497fa17f12 100644 (file)
@@ -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.
index 31bd63ab89148b86be983f5005b646bc9c9eb2db..abebc091cebc0c92dec67c388c6cd25c0ffaa0ac 100644 (file)
@@ -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 */
index ca4ae88db943bebd0d99b870dd26e903d46e66b1..c2a89205f0cc993577de3fed86cae22ec4465de2 100644 (file)
@@ -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
index c2b38c688f76378bb60baa4f2332d6fa689cd9de..4d3e17435ea5de6f5e8672d1678c89693430e6c5 100644 (file)
@@ -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)
 
index 3d86aaa6dd4fb692c09c8bf7e8954cc6ee0f31ea..bf46098f1dba7d24f59835682f89a84901a16956 100644 (file)
@@ -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<data_length) {
         const char* locName = data[i++];
+        const char* datestr = data[i++];
+        const char* datestr_2 = data[i++];
+
         Locale loc(locName);
-        SimpleDateFormat ref(pattern, loc, ec);
+        LocalPointer<Calendar> 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;
index 62015551c118e4985613c30c80513f84caac7cbf..43d3fb6d689f5148c9cf4e4a8aaf18cee824d864 100644 (file)
@@ -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 (file)
index 0000000..b550361
--- /dev/null
@@ -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<EraRules> rules1(EraRules::createInstance(calId, FALSE, status));
+        if (U_FAILURE(status)) {
+            errln(UnicodeString("Era rules for ") + calId + " is not available.");
+            continue;
+        }
+
+        LocalPointer<EraRules> 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<Calendar> 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<EraRules> 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 (file)
index 0000000..28116af
--- /dev/null
@@ -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_ */
index aeda164099525917c3217b1a03298a9717575556..00491f23de75728145ef428ac905d9163d9a7e9a 100644 (file)
 #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<SimpleDateFormat> testFmt1(new SimpleDateFormat(patText, loc, status));
+    LocalPointer<SimpleDateFormat> 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<DateTimePatternGenerator> 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<SimpleDateFormat> 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.
index 628b6e4cd40c0af6d54a5c60403405a774becee5..2d42bcc817f3180e78c5e1267c90eb77335aaa7b 100644 (file)
@@ -34,6 +34,7 @@ public:
     void TestJapanese(void);
     void TestJapaneseFormat(void);
     void TestJapanese3860(void);
+    void TestForceGannenNumbering(void);
     
     void TestPersian(void);
     void TestPersianFormat(void);
index 0d7bae442ba41e2b54237e5d455b0935380932f7..8fd3414ad23fbcebb5fd8ea67a6e0e6d084ba07f 100644 (file)
     <ClCompile Include="colldata.cpp">
       <DisableLanguageExtensions>false</DisableLanguageExtensions>
     </ClCompile>
+    <ClCompile Include="erarulestest.cpp" />
     <ClCompile Include="numfmtspectest.cpp" />
     <ClCompile Include="regiontst.cpp" />
     <ClCompile Include="ucharstrietest.cpp" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="colldata.h" />
+    <ClInclude Include="erarulestest.h" />
     <ClInclude Include="itrbbi.h" />
     <ClInclude Include="rbbiapts.h" />
     <ClInclude Include="rbbitst.h" />
index 4fea4428844fa97c382968e2a10b017977d6a15e..5eca532d565c79478f40ba7da145dd5296f87e92 100644 (file)
@@ -72,7 +72,7 @@
     </ClCompile>
     <ClCompile Include="rbbimonkeytest.cpp">
       <Filter>break iteration</Filter>
-      </ClCompile>
+    </ClCompile>
     <ClCompile Include="itspoof.cpp">
       <Filter>spoof detection</Filter>
     </ClCompile>
     <ClCompile Include="ucharstrietest.cpp">
       <Filter>data &amp; memory</Filter>
     </ClCompile>
+    <ClCompile Include="erarulestest.cpp">
+      <Filter>formatting</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="itrbbi.h">
     <ClInclude Include="listformattertest.h">
       <Filter>formatting</Filter>
     </ClInclude>
+    <ClInclude Include="erarulestest.h">
+      <Filter>formatting</Filter>
+    </ClInclude>
   </ItemGroup>
 </Project>
index cea3249a44873eef45197f2676e9dca82f2c9a58..d450922eb6ed38ef119572f3c7c55d14c3cb9cf0 100644 (file)
@@ -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) {
index 7d3257b7a4b1252e28b9497c734b3af17594813f..175f3f09795a1167c28f36f1acffc09935e4a60e 100644 (file)
@@ -1142,6 +1142,16 @@ Bangkok)•</data>
 #     •brk OK before 3063               •no brk before 301C •brk OK btw 2026   •no brk before FF01•
 <data>•\u3084•\u3063•\u3071•\u308A\u0020•\u0031\u301C\u0020•\u2026•\u2026\u0020•u30A2\uFF01\u0020•</data>
 
+####################################################################################
+#
+#  Test cjdict for Reiwa (Apple added test)
+#
+####################################################################################
+
+<locale ja>
+<word>
+<data>•日本<400>令和<400>時代<400> •</data>
+
 ####################################################################################
 #
 #  Test Apple early change of lb class for 22EF
index 0e26f5ad0acafdd08ed4a196612acc9004db1fea..a7aef3e8401f6b068113ad88f248744d3eb25f3f 100644 (file)
@@ -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{""}
                 }