C# .NET Framework 4.5如何仅通过.NET API获取指定日期日本年号信息
.NET Framework 4.5 原生获取日本年号信息方案
无需读取Windows注册表,直接依托System.Globalization命名空间下的原生API即可实现需求,核心是通过绑定了JapaneseCalendar的区域文化DateTimeFormatInfo对象,提取对应日期的纪元名称、缩写信息。
实现要点
- 不要直接硬编码纪元索引或遍历
JapaneseCalendar.Eras数组做日期匹配,直接调用JapaneseCalendar.GetEra(DateTime)方法获取指定日期对应的纪元序号,该返回值可直接传入DateTimeFormatInfo的纪元相关方法,完全避免纪元排序、边界判断的错误。 - 必须为目标文化的
DateTimeFormat.Calendar属性赋值JapaneseCalendar实例,否则会默认返回公历的纪元标识。 - 初始化文化对象时设置
useUserOverride: false,屏蔽终端用户自定义系统区域格式对返回结果的干扰。 - 日文名称/单字缩写、罗马音名称/拉丁缩写分别通过绑定了
JapaneseCalendar的ja-JP、en-US文化实例获取,不需要自己做翻译映射。
可直接运行的代码示例
using System; using System.Globalization; public class JapaneseEraUtility { public static string GetJapaneseEraInfo(DateTime targetDate) { JapaneseCalendar jpCal = new JapaneseCalendar(); // 取日文元号全称、单字缩写 CultureInfo jpCulture = new CultureInfo("ja-JP", useUserOverride: false); jpCulture.DateTimeFormat.Calendar = jpCal; int eraIndex = jpCal.GetEra(targetDate); string jpEraFull = jpCulture.DateTimeFormat.GetEraName(eraIndex); string jpEraAbbr = jpCulture.DateTimeFormat.GetAbbreviatedEraName(eraIndex); // 取罗马音全称、拉丁字母缩写 CultureInfo enCulture = new CultureInfo("en-US", useUserOverride: false); enCulture.DateTimeFormat.Calendar = jpCal; string enEraFull = enCulture.DateTimeFormat.GetEraName(eraIndex); string enEraAbbr = enCulture.DateTimeFormat.GetAbbreviatedEraName(eraIndex); return $"名称:{jpEraFull} ({enEraFull}) - 缩写:{jpEraAbbr} ({enEraAbbr}, {enEraAbbr.ToLower()})"; } // 测试调用 public static void Main() { DateTime testDate = new DateTime(2010, 1, 30); Console.WriteLine(GetJapaneseEraInfo(testDate)); // 输出:名称:平成 (Heisei) - 缩写:平 (H, h) } }
补充说明
.NET Framework 4.5 原生已内置平成及之前所有日本纪元的官方数据,调用上述代码获取2010年对应的平成相关信息不需要额外安装系统补丁或更新框架版本。如果后续需要获取令和时期的年号信息,仅需要安装对应版本的.NET Framework 区域更新包即可,代码逻辑不需要修改。
内容的提问来源于stack exchange,提问作者frankborty
相关产品推荐
相关产品推荐

