首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 數字日期轉中文日期:完整實作與單例模式範例

     編輯:關於C語言

需求

將 2007-11-4 或 07/11/4 等格式轉為 二〇〇七年十一月四號 中文格式。

核心演算法

  1. 正則驗證格式:^\d{2,4}[-/]\d{1,2}[-/]\d{1,2}$。
  2. 依分隔符(- 或 /)分割年、月、日。
  3. 年:逐位轉換(0→〇, 1→一...)。
  4. 月/日:十進位拆解(十位、個位),處理「十」、「二十」、「三十」等中文規則。

完整程式碼(單例模式)

using System;
using System.Text;
using System.Text.RegularExpressions;

namespace AndyDateConvert
{
    public class DateConvert
    {
        private static DateConvert _instance;
        private readonly char[] _chinese = { '〇','一','二','三','四','五','六','七','八','九','十' };

        private DateConvert() { }

        public static DateConvert Instance
        {
            get
            {
                if (_instance == null) _instance = new DateConvert();
                return _instance;
            }
        }

        public string Baodate2Chinese(string strDate)
        {
            var result = new StringBuilder();
            var regex = new Regex(@"^(\d{2}|\d{4})[-/](\d{1,2})[-/](\d{1,2})$");
            var match = regex.Match(strDate);
            if (!match.Success) throw new ArgumentException("日期格式錯誤");

            string[] parts = strDate.Contains('-') ? strDate.Split('-') : strDate.Split('/');

            // 年
            foreach (char c in parts[0])
                result.Append(_chinese[int.Parse(c.ToString())]);
            result.Append("年");

            // 月
            int month = int.Parse(parts[1]);
            int m1 = month / 10, m2 = month % 10;
            if (m1 > 1) result.Append(_chinese[m1]);
            if (m1 > 0) result.Append(_chinese[10]); // 十
            if (m2 != 0) result.Append(_chinese[m2]);
            result.Append("月");

            // 日
            int day = int.Parse(parts[2]);
            int d1 = day / 10, d2 = day % 10;
            if (d1 > 1) result.Append(_chinese[d1]);
            if (d1 > 0) result.Append(_chinese[10]);
            if (d2 != 0) result.Append(_chinese[d2]);
            result.Append("日"); // 或「號」

            return result.ToString();
        }
    }

    // 測試
    class Program
    {
        static void Main()
        {
            var cvt = DateConvert.Instance;
            Console.WriteLine(cvt.Baodate2Chinese("2007-11-4")); // 二〇〇七年十一月四日
            Console.WriteLine(cvt.Baodate2Chinese("07-11-4"));   // 〇七年十一月四日
            Console.WriteLine(cvt.Baodate2Chinese("2007/11/4"));
            Console.WriteLine(cvt.Baodate2Chinese("07/11/4"));
        }
    }
}

設計亮點

  • 單例模式:避免重複建立字元陣列與 Regex 物件。
  • 正則驗證:攔截非法格式,拋出 ArgumentException。
  • 支援雙分隔符:同時接受 - 與 /。
  • 可擴充:輕鬆改為「日」→「號」、加入農曆轉換等。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved