前往
大廳
主題

補充民國年轉西元年

Yang | 2022-08-16 15:41:17 | 巴幣 2 | 人氣 564

看到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"

民國年西元年互轉正常
送禮物贊助創作者 !
0
留言

創作回應

更多創作