看到new會想改掉的毛病又犯了,因此也調整前一篇(西元年轉民國年)的程式碼

 

FormatException.jpg

直接讀民國年會跳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"

民國年西元年互轉正常

創作者介紹
創作者 GNAySolution 的頭像
Yang

GNAySolution

Yang 發表在 痞客邦 留言(0) 人氣( 30 )