如何在C#控制台应用中将yymmdd格式输入日期转为长日期显示?
解决C#控制台中yymmdd格式日期转长日期显示的问题
要实现用户输入yymmdd格式的日期后,输出类似Tuesday 01 June 1999的长日期格式,我们可以通过安全解析日期和指定文化格式输出两步完成,同时加入异常处理保证程序健壮性。
完整示例代码
using System; using System.Globalization; class DateConverterProgram { static void Main() { Console.Write("Enter date: "); string userInput = Console.ReadLine(); // 尝试解析输入的yymmdd字符串为DateTime对象 if (DateTime.TryParseExact( userInput, "yyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime parsedDate)) { // 使用en-GB文化的长日期模式输出,匹配示例格式 string longDateOutput = parsedDate.ToString("D", new CultureInfo("en-GB")); Console.WriteLine(longDateOutput); } else { Console.WriteLine("Oops! Invalid date format. Please enter a date in yymmdd format (e.g., 990601 for 01 June 1999)."); } } }
关键细节解释
- 安全解析避免崩溃:用
DateTime.TryParseExact代替ParseExact,当用户输入无效格式(比如非6位字符、不存在的日期)时,程序不会抛出异常,而是友好提示错误。 - 精确匹配输入格式:
"yyMMdd"是我们指定的输入规则——yy代表两位年份,MM代表带前导零的两位月份(比如6月写06),dd代表带前导零的两位日期。 - 不受系统区域干扰:
CultureInfo.InvariantCulture确保解析过程不依赖系统的区域设置,比如不会因为系统是中文就把月份解析成中文数字。 - 匹配示例输出样式:用
"D"格式说明符表示长日期模式,同时指定en-GB文化,这样输出就会是星期几 日 月 年的样式,和示例中的Tuesday 01 June 1999完全一致。如果不指定文化,系统默认区域可能会输出不同格式(比如中文系统会显示1999年6月1日 星期二)。
可选优化:自定义两位年份的解析规则
默认情况下,.NET会把两位年份00-29解析为2000-2029,30-99解析为1930-1999。如果需要调整这个规则(比如把00-49映射到2000-2049),可以修改Calendar.TwoDigitYearMax:
// 创建独立的文化实例,避免修改全局设置 CultureInfo customCulture = (CultureInfo)CultureInfo.InvariantCulture.Clone(); // 设置两位年份对应的最大年份为2049 customCulture.Calendar.TwoDigitYearMax = 2049; if (DateTime.TryParseExact(userInput, "yyMMdd", customCulture, DateTimeStyles.None, out DateTime parsedDate)) { // 输出逻辑不变 }
内容的提问来源于stack exchange,提问作者Kobeli Senoko
相关产品推荐
相关产品推荐

