首页 新闻 会员 周边 捐助

日期函数转换

0
悬赏园豆:10 [已解决问题] 解决于 2012-08-30 23:25
l编写一个函数进行日期转换,将输入的中文日期转换为阿拉伯数字日期,比如:二零一二年十二月二十一日要转换为2012-12-21。(处理“十”的问题:1.*月十日;2.*月十三日;3.*月二十三日;4.*月三十日;)4中情况对“十”的不同翻译。1→10;2→1;3→不翻译;4→0
•测试数据:二零一二年十二月二十一日、二零零九年七月九日、二零一零年十月二十四日、二零一零年十月二十日
C#
问题补充:

用控制台程序做。

奔*跑的主页 奔*跑 | 初学一级 | 园豆:72
提问于:2012-05-26 22:00
< >
分享
最佳答案
1

使用正则表达式或字符串解析方式,把农历的年月日分解出具体的年、月、日的值,然后进行技术处理:

下面是我的代码,没运行调试,中间可能有些小问题,你自己调整一下。同时,也没对中文日期做安全检测与有效性检测,这个你自己处理下。

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];
        }
    }
}
收获园豆:10
无之无 | 大侠五级 |园豆:5095 | 2012-05-27 08:54
其他回答(2)
0

wow,这个怎么做?没有遇见过...是控制台程序还是窗体程序,如果是窗体程序使用一个叫datepickTime的控件,在将时间的显示方式改变一下就可以了....

 

还有一种方式就是输入时指定输入数字与斜线也行,避免中文输入.......

全力以赴001 | 园豆:629 (小虾三级) | 2012-05-26 22:30
1

提供一个思路:

把“十”替换“10”,然后进一步处理。

1.*月十日 = *月10日

2.*月十三日 = *月10+3日

3.*月二十三日 = *月10×2+3日

4.*月三十日 = *月10×3日

dudu | 园豆:29570 (高人七级) | 2012-05-26 22:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册