看到new會想改掉的毛病又犯了,因此也調整前一篇(西元年轉民國年)的程式碼
直接讀民國年會跳FormatException
//本地化元件,常用於讀取政府機關、公司行號相關資料文件
class Local
{
public static readonly Encoding Big5Encoding;
public static readonly TaiwanCalendar TWCalendar;
public static readonly CultureInfo TWCulture;
static Local()
{
Big5Encoding = Encoding.GetEncoding(950);
TWCalendar = new TaiwanCalendar();
TWCulture = new CultureInfo("zh-TW");
TWCulture.DateTimeFormat.Calendar = TWCalendar;
}
}
//西元年轉民國年
static string ToStringWithROCYear(this DateTime obj, in string format = "yyy/MM/dd")
{
return string.IsNullOrWhiteSpace(format) ? obj.ToString(Local.TWCulture) : obj.ToString(format, Local.TWCulture);
}
//民國年轉西元年
static DateTime ParseROCYear(this string obj)
{
return DateTime.Parse(obj, Local.TWCulture);
}
單元測試:
new DateTime(2024, 2, 29).ToString("yyy/MM/dd");
"2024/02/29"
new DateTime(2024, 2, 29).AddYears(-1911).ToString("yyy/MM/dd");
"113/02/28"
new DateTime(2024, 2, 29).ToStringWithROCYear("yyy/MM/dd");
"113/02/29"
Local.TWCalendar.GetYear(new DateTime(2024, 2, 29));
113
Local.TWCalendar.GetYear(DateTime.Now);
111
DateTime.Parse("113/02/29", Local.TWCulture).ToString("yyyy/MM/dd");
"2024/02/29"
"113/02/29".ParseROCYear().ToString("yyyy/MM/dd");
"2024/02/29"
民國年西元年互轉正常