Re: [問題] 怎麼輸出中文數字日期?

看板C_Sharp作者 (Lucifer)時間15年前 (2010/05/12 17:24), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串3/3 (看更多)
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
文章代碼(AID): #1BwdFV_y (C_Sharp)
文章代碼(AID): #1BwdFV_y (C_Sharp)