前两天在公司举行的编程比赛,做了一道题。如下:
编写一个函数进行日期转换,将输入的中文日期转换为阿拉伯数字日期,比如:二零零八年五月八日要转换为2008-05-08。
因为觉得有趣,而且有共通的地方。比如说将大写的现金金额转换成阿拉伯数字。故特扔出来抛砖引玉。
我用的是C#.
private string ConvertDate(string inputDate)
{
if (string.IsNullOrEmpty(inputDate))
{
return string.Empty;
}
DateTime dateTime = new DateTime();
string date = ConvertChineseToNumber(inputDate);
if (DateTime.TryParse(date, out dateTime))
{
return dateTime.ToString("yyyy-MM-dd");
}
else
{
return string.Empty;
}
}
private string ConvertChineseToNumber(string convertString)
{
string result = string.Empty;
Dictionary<string, string> numberDictionary = new Dictionary<string, string>();
numberDictionary.Add("零", "0");
numberDictionary.Add("一", "1");
numberDictionary.Add("二", "2");
numberDictionary.Add("三", "3");
numberDictionary.Add("四", "4");
numberDictionary.Add("五", "5");
numberDictionary.Add("六", "6");
numberDictionary.Add("七", "7");
numberDictionary.Add("八", "8");
numberDictionary.Add("九", "9");
//numberDictionary.Add("十", "10");
for(int i=0; i<convertString.Length; i++)
{
string substring = convertString.Substring(i, 1);
if (substring == "十")
{
if(i< convertString.IndexOf("年"))
{
return string.Empty;
}
if (i > 0 && i < convertString.Length)
{
string previousString = convertString.Substring(i - 1, 1);
string nextString = convertString.Substring(i + 1, 1);
if (numberDictionary.ContainsKey(previousString) && numberDictionary.ContainsKey(nextString))
{
}
else if (numberDictionary.ContainsKey(nextString))
{
result += "1";
}
else if (numberDictionary.ContainsKey(previousString))
{
result += "0";
}
else
{
result += "10";
}
}
}
else
{
if (numberDictionary.ContainsKey(substring))
{
result += numberDictionary[substring];
}
else
{
result += substring;
}
}
}
return result;
}