將 2007-11-4 或 07/11/4 等格式轉為 二〇〇七年十一月四號 中文格式。
^\d{2,4}[-/]\d{1,2}[-/]\d{1,2}$。- 或 /)分割年、月、日。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"));
}
}
}
ArgumentException。- 與 /。