和历转换

*和历控件中日期最小值是1863年6月8日,德川幕府正式向入侵的英国舰队宣战;超过这个日期会发生越界异常

和历格式:

1.平成18年9月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);//string strWareki = dt.ToString("ggyy/MM/dd", ci);

2.平成18年9月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");

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);

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

利用反射,需要引用 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);

posted @ 2017-05-12 10:07  草鞋底厄  阅读(334)  评论(0编辑  收藏  举报