黑马程序员技术交流社区
标题:
年份的转换
[打印本页]
作者:
李 玉林
时间:
2012-8-26 21:04
标题:
年份的转换
本帖最后由 lyl0043 于 2012-8-27 22:35 编辑
把数字年份转换成汉字年份,例如:2011年6月4日” 转换成 “二零一一年六月四日”。但存在一个双位数的月份和双位数的日期的问题,像这种2011年10月20日转换成“二零一二年十月二十日”。。。。求一个通俗易懂的做法
作者:
资建文
时间:
2012-8-26 22:52
string date = "2011
作者:
资建文
时间:
2012-8-26 22:53
string date = "2011
作者:
资建文
时间:
2012-8-26 22:53
string date = "2011年6月4日";
date= date.Replace("2","二");
date = date.Replace("0", "零");
date = date.Replace("1", "一");
date = date.Replace("6", "六");
date = date.Replace("4", "四");
Console.Write(date);
Console.ReadKey();
作者:
资建文
时间:
2012-8-26 22:54
不好意思卡了下 。。就多回了 也不知道为什么只显示一句
作者:
hehe04
时间:
2012-8-26 22:55
本帖最后由 hehe04 于 2012-8-26 22:57 编辑
可以在输出的时候判断 并逐个输出
using System;
using System.Collections.Generic;
using System.Text;
namespace Test8
{
class Program
{
//8、 c#时间格式转换汉字大写 比如: “2011年6月4日” 转换成 “二零一一年六月四日”。
static void Main(string[] args)
{
Console.WriteLine("请分别输入年、月、日:");
int a = Convert.ToInt32(Console.ReadLine());
int b = Convert.ToInt32(Console.ReadLine());
int c = Convert.ToInt32(Console.ReadLine());
DateTime datetime1 = new DateTime(a,b,c); //实例化一个datetime的对象datetime1;并将abc的值传递给datetime的构造函数
string date1 = datetime1.ToLongDateString();//将datetim1的值转化为长日期格式,并赋给字符串变量date1;
Console.WriteLine(date1);
char[] dateArr = date1.ToCharArray();//分解字符串
for (int i = 0; i < dateArr.Length; i++)//循环判断并修改datearr[i]的值
{
switch (dateArr[i])
{
case '0': dateArr[i] = '零'; break;
case '1': dateArr[i] = '一'; break;
case '2': dateArr[i] = '二'; break;
case '3': dateArr[i] = '三'; break;
case '4': dateArr[i] = '四'; break;
case '5': dateArr[i] = '五'; break;
case '6': dateArr[i] = '六'; break;
case '7': dateArr[i] = '七'; break;
case '8': dateArr[i] = '八'; break;
case '9': dateArr[i] = '九'; break;
default: break;
}
}
int monthNum=0;
int dayNum = 0;
for (int i = 0; i <= 5;i++ )//先输出年
{
Console.Write(dateArr[i]);
}
for (int i = 6; i <= 8; i++)//输出月
{
if (b > 9 && monthNum == 0)
{
Console.Write("十");
monthNum += 1;
}
Console.Write(dateArr[i]);
}
for (int i = 9; i < dateArr.Length; i++)//输出日
{
if (c > 9 && dayNum == 0)
{
Console.Write("十");
dayNum += 1;
}
Console.Write(dateArr[i]);
}
Console.ReadKey();
}
}
}
复制代码
作者:
hehe04
时间:
2012-8-26 23:02
资建文 发表于 2012-8-26 22:54
不好意思卡了下 。。就多回了 也不知道为什么只显示一句
明显对用户需求没仔细看!!:D
作者:
王杨武
时间:
2012-8-27 12:27
本帖最后由 王杨武 于 2012-8-27 12:38 编辑
{:soso_e113:} 这个题我做出来了。现在给你贴一下代码:class Program
{
// 5、 c#时间格式转换汉字大写 比如: “2011年6月4日” 转换成 “二零一一年六月四日”。2010年11月11日
static void Main(string[] args)
{
Console.WriteLine("请输入日期:");
string da = Console.ReadLine();
if (da.Length >= 9 && da.Length <= 11)
{
try
{
//定义转换数组
string[] c = new string[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "年", "月", "日", "十", "十一", "十二" };
StringBuilder str = new StringBuilder();
//截取月份
string strSub = da.Substring(5, 2);
char strmon = Convert.ToChar(strSub.Substring(1, 1));
//判断截取部分是否有月
if (strmon != '月')
{
for (int count = 0; count < da.Length; count++)
{
string temp = da.Substring(count, 1);
if (count == 5)
{
string temps = da.Substring(5, 2);
switch (temps)
{
case "10": str.Append(c[13]); count = 6; continue; break;
case "11": str.Append(c[14]); count = 6; continue; break;
case "12": str.Append(c[15]); count = 6; continue; break;
default:
break;
}
}
switch (temp)
{
case "0": str.Append(c[0]); break;
case "1": str.Append(c[1]); break;
case "2": str.Append(c[2]); break;
case "3": str.Append(c[3]); break;
case "4": str.Append(c[4]); break;
case "5": str.Append(c[5]); break;
case "6": str.Append(c[6]); break;
case "7": str.Append(c[7]); break;
case "8": str.Append(c[8]); break;
case "9": str.Append(c[9]); break;
case "年": str.Append(c[10]); break;
case "月": str.Append(c[11]); break;
case "日": str.Append(c[12]); break;
case "10": str.Append(c[13]); break;
default: break;
}
}
}
else
{
for (int count = 0; count < da.Length; count++)
{
string temp = da.Substring(count, 1);
switch (temp)
{
case "0": str.Append(c[0]); break;
case "1": str.Append(c[1]); break;
case "2": str.Append(c[2]); break;
case "3": str.Append(c[3]); break;
case "4": str.Append(c[4]); break;
case "5": str.Append(c[5]); break;
case "6": str.Append(c[6]); break;
case "7": str.Append(c[7]); break;
case "8": str.Append(c[8]); break;
case "9": str.Append(c[9]); break;
case "年": str.Append(c[10]); break;
case "月": str.Append(c[11]); break;
case "日": str.Append(c[12]); break;
default: break;
}
}
}
Console.WriteLine(str.ToString());
}
catch
{
throw;
}
}
else
{
Console.WriteLine("输入错误!");
}
Console.ReadKey();
}
}
作者:
李 玉林
时间:
2012-8-27 22:33
多谢大家的努力
作者:
杨正
时间:
2012-9-3 00:56
本帖最后由 杨正 于 2012-9-3 00:59 编辑
这个题我琢磨了许久,楼上两位的我也都做了测试,都存在明显的bug。
这里需要注意的几点是将“10”转换成“十”,将“20”转换成“二十”,将“29”转换成“二十九”,不是单纯的字符间的转换。
我这里把自己的附上,有不妥的地方,恳请指正,当然,也期待更好的方法。(这里用了枚举,我觉得代码少一点,用switch也是一样的。)
enum ChineseNum { 〇, 一, 二, 三, 四, 五, 六, 七, 八, 九 }; // 定义枚举:十个数字的汉字
class Program
{
static void Main(string[] args)
{
//时间格式转换汉字大写 比如: “2011年6月4日” 转换成 “二零一 一年六月四日”。
//(参考提示:把字符串作为char数组来用,判断如果是2→’二’,0→’零’,1→‘一’…)
//但存在一个双位数的月份和双位数的日期的问题,像这种2011年10月20日转换成“二零一二年十月二十日”.
Console.WriteLine("请您输入一个年份(例:2011年6月4日)");
string strDate = Console.ReadLine();
try
{ //把日期分割成年、月、日三部分
string[] strsDate = strDate.Split(new char[] { '年', '月', '日' });
string year = YearToUpper(strsDate[0]);
string month = MonthToUpper(strsDate[1]);
string day = DayToUpper(strsDate[2]);
Console.WriteLine("转换后的日期为:{0}年{1}月{2}日", year, month, day);
}
catch
{
Console.WriteLine("您输入的日期有误,请重新输入");
}
Console.ReadKey();
}
/// <summary>
/// 把年份转换成汉字
/// </summary>
/// <param name="stryear"></param>
/// <returns></returns>
public static string YearToUpper(string strYear)
{
char[] chsYear = strYear.ToCharArray();
string strYears = ""; //定义年份变量
for (int i = 0; i < chsYear.Length; i++)
{ //把年份里的每一个数字分离出来进行判断
int num = int.Parse(chsYear.ToString());
strYears += Enum.GetName(typeof(ChineseNum), num); //将数字年份转换成汉字
}
return strYears;
}
/// <summary>
/// 把月份转换成汉字
/// </summary>
/// <param name="strMonth"></param>
/// <returns></returns>
public static string MonthToUpper(string strMonth)
{
string strMonths = ""; //定义月份变量
int num = int.Parse(strMonth); //把月份转换成整数形式
if (num < 10)
{
strMonths = YearToUpper(strMonth);
}
else if (num == 10)
{
strMonths = "十";
}
else
{
string strM = YearToUpper(strMonth[1].ToString());
strMonths = "十" + strM;
}
return strMonths;
}
/// <summary>
/// 把日期转换成汉字
/// </summary>
/// <param name="strDay"></param>
/// <returns></returns>
public static string DayToUpper(string strDay)
{
string strDays = ""; //定义日期变量
int num = int.Parse(strDay); //把日期转换成整数形式
if (num < 20)
{
strDays = MonthToUpper(strDay);
}
else if (num == 20 || num == 30)
{
string strD = YearToUpper(strDay[0].ToString());
strDays = strD + "十";
}
else
{
string strD1 = YearToUpper(strDay[0].ToString());
string strD2 = YearToUpper(strDay[1].ToString());
strDays = strD1 + "十" + strD2;
}
return strDays;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2