黑马程序员技术交流社区

标题: 把数字日期转换成中文日期格式 [打印本页]

作者: 杨恩锋    时间: 2011-10-28 17:23
标题: 把数字日期转换成中文日期格式
把数字日期转换成中文日期格式,比如提示输入一个日期,假设是当前2011年10日28日这种格式,然后要求转换成:二零一一年十月二十八日。
作者: 黄朝辉    时间: 2011-10-28 20:24
写了个类:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace ConsoleApplication
  6. {
  7.     public class ChineseDate
  8.     {
  9.         private  int year;
  10.         public int Year
  11.         {
  12.             get { return year; }
  13.             set { year = value; }
  14.         }
  15.         private int month;
  16.         public int Month
  17.         {
  18.             get { return month; }
  19.             set { month = value; }
  20.         }
  21.         private int day;
  22.         public int Day
  23.         {
  24.             get { return day; }
  25.             set { day = value; }
  26.         }
  27.         public ChineseDate(int year, int month, int day)
  28.         {
  29.             this.year = year;
  30.             this.month = month;
  31.             this.day = day;
  32.         }
  33.         public string GetChineseDate()
  34.         {
  35.             string str = string.Empty;
  36.             foreach (char c in year.ToString())
  37.             {
  38.                 str += ChinaNumber(c);
  39.             }
  40.             str += "年";
  41.             if (month.ToString().Length == 1)
  42.             {
  43.                 foreach (char c in month.ToString())
  44.                 {
  45.                     str += ChinaNumber(c);
  46.                 }
  47.             }
  48.             else
  49.             {
  50.                 str += ChinaNumber(month.ToString());
  51.             }
  52.             str += "月";
  53.             if (day.ToString().Length == 1)
  54.             {
  55.                 foreach (char c in day.ToString())
  56.                 {
  57.                     str += ChinaNumber(c);
  58.                 }
  59.             }
  60.             else
  61.             {
  62.                 str += ChinaNumber(day.ToString());
  63.             }
  64.             str += "日";
  65.             return str;
  66.         }

  67.         public string ChinaNumber(char number)
  68.         {
  69.             string value=string.Empty;
  70.             switch (number)
  71.             {
  72.                 case '0':
  73.                     value = "零";
  74.                     break;
  75.                 case '1':
  76.                     value = "一";
  77.                     break;
  78.                 case '2':
  79.                     value = "二";
  80.                     break;
  81.                 case '3':
  82.                     value = "三";
  83.                     break;
  84.                 case '4':
  85.                     value = "四";
  86.                     break;
  87.                 case '5':
  88.                     value = "五";
  89.                     break;
  90.                 case '6':
  91.                     value = "六";
  92.                     break;
  93.                 case '7':
  94.                     value = "七";
  95.                     break;
  96.                 case '8':
  97.                     value = "八";
  98.                     break;
  99.                 case '9':
  100.                     value = "九";
  101.                     break;
  102.             }
  103.             return value;
  104.         }

  105.         public string ChinaNumber(string number)
  106.         {
  107.             string value = string.Empty;
  108.             switch (number[0])
  109.             {
  110.                 case '1':
  111.                     value = "";
  112.                     break;
  113.                 case '2':
  114.                     value = "二";
  115.                     break;
  116.                 case '3':
  117.                     value = "三";
  118.                     break;
  119.             }
  120.             value += "十";
  121.             if(number[1]!='0')
  122.             {
  123.                 value += ChinaNumber(number[1]);
  124.             }
  125.             return value;
  126.         }
  127.     }
  128. }
复制代码
调用:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace ConsoleApplication
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             ChineseDate ch = new ChineseDate(2008, 10, 22);
  12.             string chd = ch.GetChineseDate();
  13.             Console.WriteLine(chd);
  14.         }
  15.     }
  16. }
复制代码
结果:

作者: 李荣壮    时间: 2011-10-28 22:17
看着好复杂啊,为什么不用枚举呢,应该少很多行吧
作者: 李荣壮    时间: 2011-11-1 23:10
本帖最后由 李荣壮 于 2011-11-2 01:35 编辑

用枚举 写了一下,感觉这样代码少些,看着清楚些,就是不知道效率高不高,谁知道,请指正一下 ,不胜感激。

  1.         enum EnumOfCHS { 零, 一, 二, 三, 四, 五, 六, 七, 八, 九 } // 定义枚举:十个数字的汉字

  2.         // 传入数字日期,返回中文日期
  3.         public static string ToCHSDate(string date)
  4.         {
  5.             string chineseDate = string.Empty;  //返回的中文日期( 局部变量必须初始化)

  6.             for (int i = 0; i < date.Length; i++)    //遍历数字日期,判断是否为数字,并转换为中文表示
  7.             {
  8.                 if (Char.IsDigit(date[i])) //判断数字日期中的数字
  9.                 {
  10.                     int value = Convert.ToInt32(date[i].ToString());   //把字符转换为数字,以便获取枚举中的常量
  11.                     chineseDate += Enum.GetName(typeof(EnumOfCHS), value);//将数字转换为中文,并加入到中文日期中。
  12.                 }
  13.                 else
  14.                 {
  15.                     chineseDate += date[i].ToString(); //如果不是数字,直接加入到中文日期中
  16.                 }
  17.             }
  18.             return chineseDate; //返回中文日期
  19.         }
  20.     }
复制代码

  1.         static void Main(string[] args)
  2.         {
  3.             string date = "2011年11月01日";
  4.             Console.WriteLine(ToCHSDate(date));
  5.         }
复制代码

作者: 朱勋    时间: 2011-11-2 09:00
学习了,收获很大




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2