用控制台程序做。
使用正则表达式或字符串解析方式,把农历的年月日分解出具体的年、月、日的值,然后进行技术处理:
下面是我的代码,没运行调试,中间可能有些小问题,你自己调整一下。同时,也没对中文日期做安全检测与有效性检测,这个你自己处理下。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace GuorunAD.Common.Utility { class DateUtility { private static IDictionary<char, int> ChineseToWorldCharsMap = new Dictionary<char, int>(); private static IDictionary<int, char> WorldToChineseCharsMap = new Dictionary<int, char>(); static DateUtility() { ChineseToWorldCharsMap.Add('〇', 0); ChineseToWorldCharsMap.Add('一', 1); ChineseToWorldCharsMap.Add('二', 2); ChineseToWorldCharsMap.Add('三', 3); ChineseToWorldCharsMap.Add('四', 4); ChineseToWorldCharsMap.Add('五', 5); ChineseToWorldCharsMap.Add('六', 6); ChineseToWorldCharsMap.Add('七', 7); ChineseToWorldCharsMap.Add('八', 8); ChineseToWorldCharsMap.Add('九', 9); ChineseToWorldCharsMap.Add('十', 10); ChineseToWorldCharsMap.Add('零', 0); ChineseToWorldCharsMap.Add('壹', 1); ChineseToWorldCharsMap.Add('贰', 2); ChineseToWorldCharsMap.Add('叁', 3); ChineseToWorldCharsMap.Add('肆', 4); ChineseToWorldCharsMap.Add('伍', 5); ChineseToWorldCharsMap.Add('陆', 6); ChineseToWorldCharsMap.Add('柒', 7); ChineseToWorldCharsMap.Add('捌', 8); ChineseToWorldCharsMap.Add('玖', 9); ChineseToWorldCharsMap.Add('拾', 10); WorldToChineseCharsMap.Add(0, '〇'); WorldToChineseCharsMap.Add(1, '一'); WorldToChineseCharsMap.Add(2, '二'); WorldToChineseCharsMap.Add(3, '三'); WorldToChineseCharsMap.Add(4, '四'); WorldToChineseCharsMap.Add(5, '五'); WorldToChineseCharsMap.Add(6, '六'); WorldToChineseCharsMap.Add(7, '七'); WorldToChineseCharsMap.Add(8, '八'); WorldToChineseCharsMap.Add(9, '九'); WorldToChineseCharsMap.Add(10, '十'); WorldToChineseCharsMap.Add(100, '零'); WorldToChineseCharsMap.Add(101, '壹'); WorldToChineseCharsMap.Add(102, '贰'); WorldToChineseCharsMap.Add(103, '叁'); WorldToChineseCharsMap.Add(104, '肆'); WorldToChineseCharsMap.Add(105, '伍'); WorldToChineseCharsMap.Add(106, '陆'); WorldToChineseCharsMap.Add(107, '柒'); WorldToChineseCharsMap.Add(108, '捌'); WorldToChineseCharsMap.Add(109, '玖'); WorldToChineseCharsMap.Add(110, '拾'); } public string ToChineseDate(DateTime datetime, bool big = true, bool lunar = false) { return string.Format("{0}年{1}月{2}日", ToChineseYear(datetime.Year, big, lunar), ToChineseMonth(datetime.Month, big, lunar), ToChineseDay(datetime.Day, big, lunar)); } public DateTime ToWoldDate(string datetime) { string[] parts = datetime.Split('年', '月', '日'); return new DateTime(ToWoldYear(parts[0]), ToWorldMonth(parts[1]), ToWorldDay(parts[2])); } private string ToChineseYear(int year, bool big = true, bool lunar = false) { return this.ToChineseNumber(year, big, lunar); } private int ToWoldYear(string year) { return this.ToWorldNumber(year); } private string ToChineseMonth(int month, bool big = true, bool lunar = false) { return this.ToChineseNumber(month, big, lunar); } private int ToWorldMonth(string month) { return this.ToWorldNumber(month); } private string ToChineseDay(int day, bool big = true, bool lunar = false) { string result = this.ToChineseNumber(day, big, lunar); if (lunar && day <= 10) { result = "初" + result; } return result; } private int ToWorldDay(string day) { return ToWorldNumber(day.Substring(day.IndexOf("初") + 1)); } private string ToChineseNumber(int number, bool big = true, bool lunar = false) { string result = ""; while (number > 0) { result = this.ToChineseNumberChar(number % 10, big, lunar); number /= 10; } return result; } private int ToWorldNumber(string number) { int result = 1; foreach (char c in number) { result = result * 10 + ToWorldNumberChar(c); } return result; } private string ToChineseNumberChar(int numberChar, bool big = true, bool lunar = false) { return WorldToChineseCharsMap[big ? 100 + numberChar : numberChar].ToString(); } private int ToWorldNumberChar(char numberChar) { return ChineseToWorldCharsMap[numberChar]; } } }
wow,这个怎么做?没有遇见过...是控制台程序还是窗体程序,如果是窗体程序使用一个叫datepickTime的控件,在将时间的显示方式改变一下就可以了....
还有一种方式就是输入时指定输入数字与斜线也行,避免中文输入.......
提供一个思路:
把“十”替换“10”,然后进一步处理。
1.*月十日 = *月10日
2.*月十三日 = *月10+3日
3.*月二十三日 = *月10×2+3日
4.*月三十日 = *月10×3日