输入中文日期输出对应的数字格式的日期

案例:编写一个函数进行日期转换,将输入的中文日期转换为阿拉伯数字日期

比如:二零一二年十二月月二十一日要转换为2012-12-21。(处理“十”

的问题:1.*月十日;2.*月十三日;3.*月二十三日;4.*月三十日;)

四中情况对“十”的不同翻译。1→10;2→1;3→不翻译;4→0【年部分不

可能出现’十’,都出现在了月与日部分。】

测试数据:二零一二年十二月二十一日(2012年12月21日)、二零零九年七

月九日、二零一零年十月二十四日、二零一零年十月二十日

分析:可以考虑用字典,给出键,输出对应值

难点在对十的处理

情况              处理

一个数              10

两个数 在前             1

两个数 在后             0

三个数 在中间(一定) 不翻译

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace 日期格式转换

{

class Program

{

static void Main(string[] args)

{

while (true)

{

Console.WriteLine("请输入日期");

string dates = Console.ReadLine().Trim();

StringBuilder date = new StringBuilder();

date = GetDateFormat(dates);//具体的格式转化封装成了方法

Console.WriteLine(date);

Console.ReadKey();

Console.Clear();

}

}

/// <summary>

/// 方法:字典,再调用格式转换

/// </summary>

/// <param name="date"></param>

/// <returns></returns>

private static StringBuilder GetDateFormat(string date)

{

//声明字典,存入日期相关的键值

Dictionary<char, char> dic = new Dictionary<char, char>();

//给出字符串,放入可能出现的各个键和值,十特殊处理

string txt = "零0 一1 二2 三3 四4 五5 六6 七7 八8 九9";

//分割txt得到各个键值,分别存入字典

string[] keyValue = txt.Split(new char[] { ‘ ‘ }, StringSplitOptions.RemoveEmptyEntries);

//遍历数组,分别存入对应的键值对

for (int i = 0; i < keyValue.Length; i++)

{

if (!dic.ContainsKey(keyValue[i][0]))

{

dic.Add(keyValue[i][0], keyValue[i][1]);

}

}

//调用方法,返回数字格式的日期

return GetDigitDate(dic,date);

}

/// <summary>

/// 方法:格式转换

/// </summary>

/// <param name="dic"></param>

/// <param name="date"></param>

/// <returns></returns>

private static StringBuilder GetDigitDate(Dictionary<char, char> dic, string date)

{

//字符串转为字符数组

char[] chs = date.ToCharArray();

StringBuilder sb = new StringBuilder();

for (int i = 0; i < chs.Length; i++)

{

对十的处理

情况                翻译成:

十                       10

十几                    1

几十                    0

几十几            不翻译

if (chs[i] == ‘十‘)

{

X代表字典中没有包含的字符

//十   X十X   10

if (!dic.ContainsKey(chs[i - 1]) && !dic.ContainsKey(chs[i + 1]))

{

sb.Append("10");

}

//十几  X十几X  1

else if (!dic.ContainsKey(chs[i - 1]) && dic.ContainsKey(chs[i + 1]))

{

sb.Append("1");

}

//几十   X几十X 0

else if (dic.ContainsKey(chs[i - 1]) && !dic.ContainsKey(chs[i + 1]))

{

sb.Append("0");

}

//几十几  X几十几X 空

else if (!dic.ContainsKey(chs[i - 1]) && !dic.ContainsKey(chs[i + 1]))

{

sb.Append("");

}

}

else if (dic.ContainsKey(chs[i]))

{

//字典中存在就输出对应值

sb.Append(dic[chs[i]].ToString());

}

else if (chs[i] == ‘年‘ || chs[i] == ‘月‘)

{

//年、月用—替换

sb.Append("-");

}

}

return sb;

}

}

}

总结:本题的难点在对十的处理,它可以返回10,1,0,“”;四种情况;字典是<char,char>类型的,要对输入字符串的每一个字符进行判断,如果通过chs[i]=‘x‘;然后

return new string(chs);字符串的方法会很棘手(如翻译成10时很难处理);这时要想到到StringBuilder的方法。

时间: 2024-08-29 18:21:28

输入中文日期输出对应的数字格式的日期的相关文章

sql的基础语句-单行函数,dual,数字函数,日期函数,表连接,集合运算,分组报表,单行子查询,多行子查询

3. 单行函数 3.1 转换函数 select ascii('A'),chr(65) from dual; select to_char(1243123),1231451 from dual;靠左边的就是字符串,靠右边的就是数字 select to_char(123512a121) from dual;   --错误的写法,没有引号表示数字,但是数字里面包含了字母,不合法的输入值 select to_number('123141211') from dual; select to_number(

用DateTime.ToString(string format)输出不同格式的日期

Copy自:http://www.cnblogs.com/xvqm00/archive/2009/02/19/1394093.html DateTime.ToString()函数有四个重载.一般用得多的就是不带参数的那个了.殊不知,DateTime.ToString(string format)功能更强大,能输出不同格式的日期.以下把一些情况罗列出来,供大家参考.有些在MSDN上有的就没有列出来了. 1.         y代表年份,注意是小写的y,大写的Y并不代表年份. 2.         

JavaScript控制输入框中只能输入中文、数字和英文

1.问题背景 遇到这样一个问题:有一个输入框,要求只能输入中文.数字和英文(即过滤特殊字符串) 2.JS代码 function  checkUsername() { //正则表达式 var reg = new RegExp("^[a-zA-Z\d\u4E00-\u9FA5]+$"); //获取输入框中的值 var username = document.getElementById("username").value.trim(); //判断输入框中有内容 if(u

10.16输入一个字符串,内有数字和非数字字符,如: a123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组num中。例如123放在num[0]中,456放在num[1]中……统计共有多少个整数,并输出这些数。

10.16输入一个字符串,内有数字和非数字字符,如: a123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组num中.例如123放在num[0]中,456放在num[1]中--统计共有多少个整数,并输出这些数. #include <stdio.h> int main(){ void search(char * parr, int * pnum); char arr[100],* parr; int num[30],* pnum; parr=arr;

Js控制文本框只能输入中文、英文、数字与指定特殊符号

JS 控制文本框只能输入数字<input onkeyup="value=value.replace(/[^0-9]/g,'')"onpaste="value=value.replace(/[^0-9]/g,'')" oncontextmenu ="value=value.replace(/[^0-9]/g,'')"> JS 控制文本框只能输入数字.小数点<inputonkeyup="value=value.replac

js 控制文本框只能输入中文、英文、数字等

总而言之:先在<input>里输入onkeyup="value=value.replace(/[^\X]/g,'')" 然后在(/[\X]/g,'')里的X换成你想输入的代码就可以了,中文u4E00-u9FA5,数字0-9,英文a-z\A-Z,其它符号@.点或其它符号.也可以多个,用\隔开就行了. 例如:中英文 + 数字 + @符号 + 点符号   \a-\z\A-\Z0-9\u4E00-\u9FA5\@\. 若想在文本框里不能右键弹出菜单和不能粘贴进复制的信息的话 就要在

C# 怎么显示中文格式的日期、星期几

//该语句显示的为英文格式DateTime.Now.DayOfWeek.ToString(); //显示中文格式星期几 "星期" + DateTime.Now.ToString("ddd",new System.Globalization.CultureInfo("zh-cn")); //显示中文格式的日期DateTime.Now.ToLongDateString(); // 显示格式为"2008年1月1日"DateTime.

JS 控制文本框只能输入中文、英文、数字与指定特殊符号

想做姓名输入的js判断是否是中文,但是网上找的很多是源于一篇文章的,判断中文的正则式不对,后来找到一个可以准确判断了,但是是监测里面有中文的就行,跟我想要的只能输入中文的意思相左,所以又找了下面的 JS 控制文本框只能输入数字 input onkeyup="value=value.replace(/[^0-9]/g,'')" onpaste="value=value.replace(/[^0-9]/g,'')" oncontextmenu = "value

标准数字格式字符串输出示例

标准数字格式字符串输出示例 MSDN 下列表包含通过使用标准数字格式字符串生成输出的几个示例. 下列表中的每一列对应于标准数字格式字符串主题中的一行.通过结合使用 ToString 方法与标准数值格式说明符以及特定数据类型.值和区域性生成输出. 货币 格式字符串 区域性 数据类型 值 输出 C en-US Double 12345.6789 $12,345.68 C de-DE Double 12345.678 12.345,68 € 十进制数 格式字符串 区域性 数据类型 值 输出 D en-