利用C#日期格式转化日本和历

日本历将每个皇帝的统治时期标识为一个纪元。当前纪元是 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

 
 
 
  1. CultureInfo ci = new CultureInfo("ja-JP");  
  2. Calendar cal = new JapaneseCalendar();  
  3. ci.DateTimeFormat.Calendar = cal;  
  4. DateTime dt = DateTime.Parse("2006/09/26");  
  5. string strWareki = dt.ToString("ggyy/MM/dd", ci);  
  6. Console.WriteLine(strWareki); // output: 平成18/09/26 

当然其中 gyy/MM/dd 还可以用 gyy年MM月dd日。

2)  平成18/09/26 转换为 2006/09/26

 
 
 
  1. CultureInfo ci = new CultureInfo("ja-JP");  
  2. Calendar cal = new JapaneseCalendar();  
  3. ci.DateTimeFormat.Calendar = cal;  
  4. string strWareki = "平成18/09/26";  
  5. string strDate = DateTime.ParseExact(strWareki, "ggyy/MM/dd", ci).ToString("yyyy/MM/dd");  
  6. Console.WriteLine(strDate);  // output: 2006/09/26 

ps: strWareki = "平18/09/26"; 也是可以成功转换的。

3)  2006/09/26 转换为 平18/09/26 ( "平"为"平成"的简写)

 
 
 
  1. CultureInfo ci = new CultureInfo("ja-JP");  
  2. Calendar cal = new JapaneseCalendar();  
  3. ci.DateTimeFormat.Calendar = cal;  
  4. DateTime dt = DateTime.Parse("2006/09/26");  
  5. string strWareki = ci.DateTimeFormat.GetAbbreviatedEraName(cal.GetEra(dt)) + dt.ToString("yy/MM/dd", ci);  
  6. Console.WriteLine(strWareki); // output: 平18/09/26 

GetAbbreviatedEraName() 方法根据纪元序号获取该纪元名称的简写。

4)  2006/09/26 转换为 H18/09/26 ( "H"为"平成"的英文简写)

这里因为DateTimeFormat没有提供直接的方法,因此稍微麻烦点。

方法一:      

 
 
 
  1. string[] engEras = {"M""T""S""H"};  
  2. Calendar cal = new JapaneseCalendar();  
  3. DateTime dt = DateTime.Parse("2006/09/26");  
  4. string strWareki = dt.ToString("{0}{1}/MM/dd");  
  5. strWareki = string.Format(strWareki, engEras[cal.GetEra(dt) - 1], cal.GetYear(dt).ToString("00"));  
  6. Console.WriteLine(strWareki); // output: H18/09/26 

此方法扩展性差,万一日本当今的天皇挂了,这段语句出来的和历就不对了。。。

方法二:

利用反射,需要引用 System.Reflection , 获取 DateTimeFormatInfo 中非公开的属性 —— AbbreviatedEnglishEraNames

 
 
 
  1. CultureInfo ci = new CultureInfo("ja-JP");  
  2. Calendar cal = new JapaneseCalendar();  
  3. ci.DateTimeFormat.Calendar = cal;  
  4. DateTime dt = DateTime.Parse("2006/09/26");  
  5. Type t = typeof( DateTimeFormatInfo );  
  6. PropertyInfo pi = t.GetProperty( "AbbreviatedEnglishEraNames", BindingFlags.NonPublic|BindingFlags.Instance );  
  7. string[] engEras = (string[])pi.GetValue( ci.DateTimeFormat, null );  
  8. int era = cal.GetEra(dt);  
  9. string strWareki = engEras[era-1] + dt.ToString("yy/MM/dd", ci);  
  10. Console.WriteLine(strWareki); // output: H18/09/26 

该方法可以通过依赖 System.dll 来扩展应用程序,是比较好的转换方法。

以上是一些常用的日本历日期转换的代码,只要掌握 CultureInfo 和 Calendar 对象的使用, 其他地域日期显示也不在话下了。

【编辑推荐】

  1. C#调用Windows API函数
  2. 详解C#调用Outlook API
  3. C#连接Access、SQL Server数据库
  4. 介绍C#调用API的问题
  5. C#调用Excel与附加代码

分享文章:利用C#日期格式转化日本和历
URL地址:http://www.36103.cn/qtweb/news15/1465.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联