C#字符串转日期的示例代码及实用技巧

发布时间:2023-05-19

一、概述

在开发中,我们经常需要将时间字符串转换为具体日期类型,这是一个非常常见的需求。而 C# 在日期转换方面给我们提供的方法十分灵活,本文将会介绍 C# 中字符串如何转换为日期类型,以及实用的技巧和注意点。

二、方法

1、使用 DateTime.Parse() 方法转换

在 C# 中,可以使用 DateTime.Parse() 方法将字符串转换为 DateTime 对象。例如:

string date = "2020/11/11";
DateTime dateTime = DateTime.Parse(date);
Console.WriteLine(dateTime.ToString());
// 输出:2020/11/11 12:00:00 上午 12:00:00

需要注意的是,DateTime.Parse() 方法在转换时需要确保字符串的格式和本地区域设置一致,否则会抛出异常。

2、使用 DateTime.ParseExact() 方法转换

如果我们已经知道了日期字符串的格式,则可以使用 DateTime.ParseExact() 方法进行转换。例如:

string dateStr = "2020-11-11 11:11:11";
string format = "yyyy-MM-dd HH:mm:ss";
DateTime dateTime = DateTime.ParseExact(dateStr, format, CultureInfo.InvariantCulture);
Console.WriteLine(dateTime.ToString());
// 输出:2020/11/11 11:11:11 上午 11:11:11

在这段代码中,我们需要传入格式字符串("yyyy-MM-dd HH:mm:ss")以及 CultureInfo 对象来指定格式和本地区域设置。

3、使用 DateTime.TryParse() 方法转换

由于日期字符串格式不确定,我们需要避免因为格式错误而导致程序抛出异常。因此,我们可以使用 DateTime.TryParse() 方法进行日期时间字符串转换。例如:

string date = "2020/11/11";
DateTime dateTime;
if (DateTime.TryParse(date, out dateTime))
{
    Console.WriteLine(dateTime.ToString());
}
else
{
    Console.WriteLine("字符串无法成功转换为日期");
}
// 输出:2020/11/11 12:00:00 上午 12:00:00

在上面的代码中,我们使用了 TryParse() 方法来尝试将字符串转换为 DateTime 类型。如果转换成功,则会返回 true,并将转换后的值赋值给 dateTime 变量。否则返回 false

三、实用技巧和注意点

1、使用 DateTime.TryParseExact() 方法进行格式校验

在日期字符串格式不确定的情况下,为了避免 TryParse() 方法返回 false,我们可以使用 DateTime.TryParseExact() 方法进行格式校验。例如:

string date = "2020-11-11";
string[] formats = { "yyyy/MM/dd", "yyyy-MM-dd", "yyyyMMdd" };
DateTime dateTime;
if (DateTime.TryParseExact(date, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
{
    Console.WriteLine(dateTime.ToString());
}
else
{
    Console.WriteLine("字符串无法成功转换为日期");
}
// 输出:2020/11/11 12:00:00 上午 12:00:00

在上面的代码中,我们传入了多个格式字符串进行校验,保证了如果字符串的格式在这些格式中的任何一个都可以被成功转换为 DateTime 类型。

2、使用 TryParseExact() 方法自定义格式校验

如果你已经确认了日期字符串的格式,并且想要通过自定义格式来进行校验,可以使用 TryParseExact() 方法自定义格式校验。例如:

string dateStr = "2020年11月11日";
string format = "yyyy年MM月dd日";
DateTime dateTime;
if (DateTime.TryParseExact(dateStr, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
{
    Console.WriteLine(dateTime.ToString());
}
else
{
    Console.WriteLine("字符串无法成功转换为日期");
}
// 输出:2020/11/11 12:00:00 上午 12:00:00

在上面的代码中,我们通过 format 字符串来约束输入的字符串格式,确保输入的字符串和指定的格式一致。

3、使用 DateTime.TryParseExact()CultureInfo 对象进行本地化设置

在不同的区域设置下,日期字符串的格式可能会不同。为了确保转换的准确性和正确性,我们可以使用 DateTime.TryParseExact()CultureInfo 对象进行本地化设置。例如:

string dateStr = "11/11/2020";
string[] formats = { "yyyy/MM/dd", "yyyy-MM-dd", "MM/dd/yyyy" };
CultureInfo culture = new CultureInfo("en-US");
DateTime dateTime;
if (DateTime.TryParseExact(dateStr, formats, culture, DateTimeStyles.None, out dateTime))
{
    Console.WriteLine(dateTime.ToString());
}
else
{
    Console.WriteLine("字符串无法成功转换为日期");
}
// 输出:2020/11/11 12:00:00 上午 12:00:00

在上面的代码中,我们首先设置了本地区域为 "en-US",然后将字符串格式限定为 "yyyy/MM/dd"、"yyyy-MM-dd"、"MM/dd/yyyy" 中的任意一个。这样可以防止由于本地区域设置导致的转换错误。

结论

本文介绍了在 C# 中字符串如何转换为日期类型,并介绍了一些实用的技巧和注意点。需要注意的是,在进行字符串转换时需要确保格式的准确性和统一性,以及本地化设置和格式校验的重要性,这可以为后期的开发和维护带来便利。