日本历将每个皇帝的统治时期标识为一个纪元。当前纪元是 Heisei 纪元,始于公历 1989 年。纪元名称通常显示在年份前。例如,公历 2001 年是日本历 Heisei 13 年。注意,纪元的***年称为“Gannen”;所以公历 1989 年是日本历 Heisei Gannen 年。
成都创新互联是一家网站设计公司,集创意、互联网应用、软件技术为一体的创意网站建设服务商,主营产品:成都响应式网站建设、品牌网站设计、成都营销网站建设。我们专注企业品牌在网站中的整体树立,网络互动的体验,以及在手机等移动端的优质呈现。网站制作、网站设计、移动互联产品、网络运营、VI设计、云产品.运维为核心业务。为用户提供一站式解决方案,我们深知市场的竞争激烈,认真对待每位客户,为客户提供赏析悦目的作品,网站的价值服务。
纪元名称 | 纪元缩写 | 公历日期 |
平成 (Heisei) | 平 (H, h) | 1989 年 1 月 8 日至今 |
昭和 (Showa) | 昭 (S, s) | 1926 年 12 月 25 日至 1989 年 1 月 7 日 |
大正 (Taisho) | 大 (T, t) | 1912 年 7 月 30 日至 1926 年 12 月 24 日 |
明治 (Meiji) | 明 (M, m) | 1868 年 9 月 8 日至 1912 年 7 月 29 日 |
所以根据日本历的习惯, 2006/09/26 应该被表示为 平成18年9月26日 或者是 H18/9/26。
在国际化应用中,CultureInfo类(System.Globalization命名空间下)是用来控制显示日期的地域。
JapaneseCalendar类(System.Globalization命名空间下)则表示日本历。
以下是几种日期转换的代码:
1) 2006/09/26 转换为 平成18/09/26
- CultureInfo ci = new CultureInfo("ja-JP");
- Calendar cal = new JapaneseCalendar();
- ci.DateTimeFormat.Calendar = cal;
- DateTime dt = DateTime.Parse("2006/09/26");
- string strWareki = dt.ToString("ggyy/MM/dd", ci);
- Console.WriteLine(strWareki); // output: 平成18/09/26
当然其中 gyy/MM/dd 还可以用 gyy年MM月dd日。
2) 平成18/09/26 转换为 2006/09/26
- CultureInfo ci = new CultureInfo("ja-JP");
- Calendar cal = new JapaneseCalendar();
- ci.DateTimeFormat.Calendar = cal;
- string strWareki = "平成18/09/26";
- string strDate = DateTime.ParseExact(strWareki, "ggyy/MM/dd", ci).ToString("yyyy/MM/dd");
- Console.WriteLine(strDate); // output: 2006/09/26
ps: strWareki = "平18/09/26"; 也是可以成功转换的。
3) 2006/09/26 转换为 平18/09/26 ( "平"为"平成"的简写)
- CultureInfo ci = new CultureInfo("ja-JP");
- Calendar cal = new JapaneseCalendar();
- ci.DateTimeFormat.Calendar = cal;
- DateTime dt = DateTime.Parse("2006/09/26");
- string strWareki = ci.DateTimeFormat.GetAbbreviatedEraName(cal.GetEra(dt)) + dt.ToString("yy/MM/dd", ci);
- Console.WriteLine(strWareki); // output: 平18/09/26
GetAbbreviatedEraName() 方法根据纪元序号获取该纪元名称的简写。
4) 2006/09/26 转换为 H18/09/26 ( "H"为"平成"的英文简写)
这里因为DateTimeFormat没有提供直接的方法,因此稍微麻烦点。
方法一:
- string[] engEras = {"M", "T", "S", "H"};
- Calendar cal = new JapaneseCalendar();
- DateTime dt = DateTime.Parse("2006/09/26");
- string strWareki = dt.ToString("{0}{1}/MM/dd");
- strWareki = string.Format(strWareki, engEras[cal.GetEra(dt) - 1], cal.GetYear(dt).ToString("00"));
- Console.WriteLine(strWareki); // output: H18/09/26
此方法扩展性差,万一日本当今的天皇挂了,这段语句出来的和历就不对了。。。
方法二:
利用反射,需要引用 System.Reflection , 获取 DateTimeFormatInfo 中非公开的属性 —— AbbreviatedEnglishEraNames
- CultureInfo ci = new CultureInfo("ja-JP");
- Calendar cal = new JapaneseCalendar();
- ci.DateTimeFormat.Calendar = cal;
- DateTime dt = DateTime.Parse("2006/09/26");
- Type t = typeof( DateTimeFormatInfo );
- PropertyInfo pi = t.GetProperty( "AbbreviatedEnglishEraNames", BindingFlags.NonPublic|BindingFlags.Instance );
- string[] engEras = (string[])pi.GetValue( ci.DateTimeFormat, null );
- int era = cal.GetEra(dt);
- string strWareki = engEras[era-1] + dt.ToString("yy/MM/dd", ci);
- Console.WriteLine(strWareki); // output: H18/09/26
该方法可以通过依赖 System.dll 来扩展应用程序,是比较好的转换方法。
以上是一些常用的日本历日期转换的代码,只要掌握 CultureInfo 和 Calendar 对象的使用, 其他地域日期显示也不在话下了。
【编辑推荐】
分享文章:利用C#日期格式转化日本和历
URL地址:http://www.36103.cn/qtweb/news15/1465.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联