日期转换 例如 二零零六年十二月二十一日 转换成 2006年12月21日

日期转换  例如 二零零六年十二月二十一日 转换成 2006年12月21日

 class Program
    {
        static void Main(string[] args)
        {
            //编写一个函数进行日期转换,将输入的中文日期转换为阿拉伯数字日期,比如:二零一二年十二月二十一日要转换为2012-12-21.(处理“十”的问题:1,*月十日;2,*月十三日;3,*月23日;4,*月三十日;)四种情况对“十”的不同翻译
            Console.WriteLine("请输入日期");
            string strDate = Console.ReadLine();//读取用户输入的内容
            //string strDate = "二零一二年十二月二十一日";
            string time = ConvertToDate(strDate);
            Console.WriteLine(time);
            Console.ReadKey();
        }

        private static string ConvertToDate(string strDate)
        {

            StringBuilder sb = new StringBuilder();//表示可变字符串,次类不能被继承
            string zidian = "零0 一1 二2 三3 四4 五5 六6 七7 八8 九9";
            //汉字做键 数字做值
            Dictionary<char, char> dic = new Dictionary<char, char>();
            string[] txt = zidian.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries );//用空格切割 非常重要
            for(int i = 0; i < txt.Length; i++)//先做字典
            {
                if (!dic.ContainsKey(txt[i][0]))//已经确定 “string zidian = "零0一1二2三3四4五5六6七7八8九9";”没有重复的
                {
                    dic.Add(txt[i][0], txt[i][1]);//键与值均存储起来
                }
                //txt[i][0]
               
            }
            char[] chs = strDate.ToCharArray();//字符串复制到字符数组
            for(int i = 0; i < chs.Length; i++)
            {
                //先判断该字符是不是 十
                if (chs[i] == '十')
                {
                    if (!dic.ContainsKey(chs[i - 1]) && !dic.ContainsKey(chs[i + 1]))//如果前后都不在字典中
                    {
                        sb.Append("10");
                    }
                    else if(!dic.ContainsKey(chs[i - 1]) && dic.ContainsKey(chs[i + 1]))//如果前面不在,后面再
                    {
                        sb.Append("1");
                    }
                    else if(dic.ContainsKey(chs[i - 1]) && !dic.ContainsKey(chs[i + 1]))
                    {
                        sb.Append("0");//Append()向此实例增加制定字符串的副本
                    }
                    else//(dic.ContainsKey(chs[i - 1]) && dic.ContainsKey(chs[i + 1])) 前后都在词典中
                    {
                        //sb.Append();
                      
                    }

                }
                else//不是十   //例如 二零零六年五月三日
                {
                    //如果当前的字符不是十,再判断该字符在字典中是否存在
                    if (dic.ContainsKey(chs[i]))
                    {
                        sb.Append(dic[chs[i]]);//包含该汉字,就把数值引出来  例如 "六"
                    }
                    else
                    {
                        sb.Append(chs[i]);//如果不存在,是本身 例如“年”
                    }
                }
            }
            return sb.ToString();
    
        }
    }

注意:1)用词典切割,必须原字符串提供可切割的部分,例如string zidian = "零0 一1 二2 三3 四4 五5 六6 七7 八8 九9";可以用空格来切割;

2)先做字典

 for(int i = 0; i < txt.Length; i++)//先做字典
                {
                    if (!dic.ContainsKey(txt[i][0]))//已经确定 “string zidian = "零0一1二2三3四4五5六6七7八8九9";”没有重复的
                    {
                        dic.Add(txt[i][0], txt[i][1]);//键与值均存储起来
                    }
                    //txt[i][0]
               
                }

3)char[] chs = strDate.ToCharArray();//字符串复制到字符数组  ,再判断

猜你喜欢

转载自blog.csdn.net/nsjlive/article/details/81148301