日本和历日期转换
;
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 对象的使用, 其他地域日期显示也不在话下了。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |