本帖最后由 幻想领域 于 2012-10-30 17:08 编辑
这个问题大家讨论很久了(黑马的学习氛围就是好)。
刚我改了一下自己的代码,把完整的功能实现了。代码还算简洁,只有四十行
包括:判断日期错误(如输入2011年2月29(平年2月无29),月份大于12,日期大于31);
十以上月份日期转换。
主要用到datetime类(可以自动判断日期是否合理),数组(存储月份、日期包括大于十的值),replace函数(字符串替换)、
StringBuilder可变字符串存年份信息
实现思路:
1、获取日期,并在try内将其转换为dateTime类型,如果日期错误(如输入2011年2月29,月份大于12,日期大于31,则跳到catch提示错误)
2、根据年月日分割日期,注意不能用yyyy年MM月dd日,否则输入2年1月1日时,转换成2002年01月01日,将影响效果
3、根据Replaceyear转换年份(遍历年份的每一个项,将数组对应的汉字追加到str)
4、根据ReplaceMonthAndDay转换月日,将数字替换为数组对应的汉字。- static void Main(string[] args)
- {
- Console.WriteLine("请输入yy年MM月dd日格式时间");
- string dateTime = Console.ReadLine();
- try
- {
- //使用datetime转换,如果日期错误(如输入2011年2月29,月份大于12,日期大于31,则跳到catch提示错误)
- DateTime dt = DateTime.Parse(dateTime);
- //根据年月日分割日期,注意不能用yyyy年MM月dd日,否则输入2年1月1日时,转换成2002年01月01日,将影响效果
- string[] newDateTime = dt.ToString("y年M月d日").Split(new string[] { "年", "月", "日" }, StringSplitOptions.RemoveEmptyEntries);
- string newYear = Replaceyear(newDateTime[0]);//转换年
- string month = ReplaceMonthAndDay(newDateTime[1]);//转换月份
- string day = ReplaceMonthAndDay(newDateTime[2]);//转换天
- Console.WriteLine("{0}年{1}月{2}日",newYear,month,day);
- }
- catch (Exception)
- {
- Console.WriteLine("输入的日期错误");
- }
- Console.ReadKey();
- }
- static string Replaceyear(string year)
- {
- string[] y = new string[] { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
- StringBuilder str =new StringBuilder();
- for (int i = 0; i < year.Length; i++)
- {
- str.Append(y[int.Parse(year[i].ToString())]);//取出对应的汉字存到str中
- }
- return str.ToString();}
- //转换月份和日期
- static string ReplaceMonthAndDay(string md)
- {
- string[] rmd= new string[] {"零","一","二","三","四","五","六","七","八","九","十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","二十一","二十二","二十三","二十四","二十五","二十六","二十七","二十八","二十九","三十","三十一"};
- md = md.Replace(md, rmd[int.Parse(md)]);//取出对应的汉字
- return md;
- }
复制代码 |