Re: [問題] 怎麼輸出中文數字日期?
petrushka:
首先很感謝你的提示. 的確, 我是自己轉換, 但是是笨一點的方法. 雖然我想參考
你去修改"日", e.g. "一"到"三十一"之類的, 但年我就不知道了, 感覺上年並不像"日
"與"月"有個既定的循環, 於是我採取了.NET的Microsoft Visual Studio
International Feature Pack 2.0將阿拉伯數字轉成國字來處理"年"與"日"的轉換.
至於月份跟星期都可以拿現成的XD
我也放上我的code(請鞭小力QwQ一點):
string year, month, day, weekName;
//利用DateTimeFormatInfo可以現成的取得月份與星期
DateTimeFormatInfo dtfi = new CultureInfo("zh-TW").DateTimeFormat;
month = dtfi.GetMonthName(DateTime.Now.Month);
weekName = dtfi.GetDayName(DateTime.Now.DayOfWeek);
//"年"跟"日"是採用EastAsiaNumericFormatter轉換
TaiwanCalendar tc = new TaiwanCalendar();
year = EastAsiaNumericFormatter.FormatWithCulture("Ln",
tc.GetYear(DateTime.Now), null, new CultureInfo("zh-TW"));
day = EastAsiaNumericFormatter.FormatWithCulture("Ln",
DateTime.Now.Day, null, new CultureInfo("zh-TW"));
最後再串聯起來.
不過我知道我的方法很笨啦Orz… 但幾行code就可以達到我想要的效果, 對於我這
個懶人來講, C/P值很高:)
※ 引述《petrushka (不放過自己)》之銘言:
: 首先講比較簡單的,如果我要輸出如"中華民國99年5月7日"怎麼做,範例如下:
: using System.Globalization;
: using System.Threading;
: static void Main( string[] args )
: {
: Thread.CurrentThread.CurrentCulture = new CultureInfo( "zh-TW" );
: TaiwanCalendar twCalendar = new TaiwanCalendar();
: Thread.CurrentThread.CurrentCulture.DateTimeFormat.Calendar = twCalendar;
: Console.WriteLine( DateTime.Now.ToLongDateString() );
: Console.ReadKey();
: }
: 當前3行設定完成,基本上日期輸出都會以中華民國曆去顯示。
: 再講其他的,如果我要顯示農曆日期怎麼做,我貼上我使用的範例,如下:
: // 天干
: private static string[] CelestialStem = { string.Empty, "甲", "乙", "丙",
: "丁", "戊", "己", "庚", "辛", "壬", "癸" };
: // 地支
: private static string[] TerrestrialBranch = { string.Empty, "子", "丑", "寅",
: "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥" };
: // 生肖
: private static string[] LunisolarSymbol = { string.Empty, "鼠", "牛", "虎",
: "兔", "龍", "蛇", "馬", "羊", "猴", "雞", "狗", "豬" };
: // 月份
: private static string[] LunisolarMonth = { string.Empty, "一", "二", "三",
: "四", "五", "六", "七", "八", "九", "十", "十一", "十二" };
: // 日
: private static string[] LunisolarDay = {string.Empty, "初一", "初二", "初三",
: "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二",
: "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一",
: "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "卅",
: "卅一" };
: // 取得台灣農曆日期
: public static string GetTaiwanLunisolarDate( DateTime pDateTime )
: {
: // 農曆
: TaiwanLunisolarCalendar chnCalendar = new TaiwanLunisolarCalendar();
: int sexagenaryYear = chnCalendar.GetSexagenaryYear( pDateTime );
: int celestialStemYear = chnCalendar.GetCelestialStem( sexagenaryYear );
: int terrestrialBranchYear = chnCalendar.GetTerrestrialBranch(
: sexagenaryYear );
: int chnMonth = chnCalendar.GetMonth( pDateTime );
: int leapMonth = chnCalendar.GetLeapMonth( chnCalendar.GetYear(
: pDateTime ) );
: int chnDay = chnCalendar.GetDayOfMonth( pDateTime );
: // 如果閏月
: if( leapMonth > 0 && chnMonth >= leapMonth )
: {
: chnMonth -= 1;
: }
: string lunisolarDate = string.Format(
: "{0}年{1}月{2}日",
: CelestialStem[ celestialStemYear ] +
: TerrestrialBranch[ terrestrialBranchYear ],
: LunisolarMonth[ chnMonth ],
: LunisolarDay[ chnDay ] );
: return lunisolarDate;
: }
: // 取得台灣農曆生肖
: public static string GetTaiwanLunisolarSymbol( DateTime pDateTime )
: {
: // 農曆
: TaiwanLunisolarCalendar chnCalendar = new TaiwanLunisolarCalendar();
: int sexagenaryYear = chnCalendar.GetSexagenaryYear( pDateTime );
: int terrestrialBranchYear = chnCalendar.GetTerrestrialBranch(
: sexagenaryYear );
: return LunisolarSymbol[ terrestrialBranchYear ];
: }
: 最後,你原文想要問的中文月份與星期,就只有採用類似農曆日期的顯示做法了,
: 就是自己去做出數字對中文的對應。
: .NET有提供中華民國(TaiwanCalendar)與農曆(TaiwanLunisolarCalendar)的日曆類別,
: 但是函式的回傳值也還是int,這是因為類別介面要相容,且為了方便運算。
: 電腦運算都是數值,中文文字都是人家寫好幫你對應的。.NET沒有內建,當然就自己寫。
: 別忘了,你是個程式設計師!
: 判斷一下CurrentCulture,就可以去改寫與調用自己的類別與函式。
: 就好像.NET有提供TaiwanCalendar,既然它功能不全,就再自己寫一個新的!
: 譬說就叫NewTaiwanCalendar類別,這樣就可以指派給CurrentCulture去使用。
: 最後就可以輸出自己想要的。
: ※ 引述《zeat (Lucifer)》之銘言:
: : 各位好:
: : 我的問題是C#是否可以輸出中文數字的日期, e.g. 九十九年四月二十五日.而不是
: : 99/4/25.
: : 雖然我有試過System.Globalization.CultureInfo, 但只有研究出GetMonthName
: : 跟GetDayName可以輸出中文的月份跟星期, 年跟日就無法度了.
: : thanks a lot.
--
頭髮的長度決定威能的強度. by 小傑 富力士
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.68.64.24
推
05/12 17:42, , 1F
05/12 17:42, 1F
→
05/12 17:43, , 2F
05/12 17:43, 2F
討論串 (同標題文章)