C# DateTime 解析
最后修改于 2023 年 7 月 5 日
C# DateTime 解析教程展示了如何在 C# 中将字符串转换为 DateTime 对象。
C# DateTime
DateTime 值类型表示日期和时间,值的范围从公元 (Common Era) 0001 年 1 月 1 日 00:00:00(午夜)到公元 (C.E.) 9999 年 12 月 31 日 23:59:59,采用公历。
解析方法
DateTime.Parse 将日期时间字符串转换为 DateTime。它自动尝试确定日期时间格式。
DateTime.ParseExact 方法将日期时间的指定字符串表示形式转换为 DateTime。日期时间字符串格式必须与指定的格式完全匹配;否则会引发异常。
日期和时间与文化有关;这些方法要么使用当前文化,要么接受特定文化。
C# DateTime.Parse
我们使用 DateTime.Parse 将日期时间字符串转换为 DateTime。
string[] dates = {
"03/19/2021 07:20:58",
"03/19/2021",
"3/2021",
"3/21",
"4 AM",
"2021-03-19T05:20:12.0000000Z",
"2021-03-19T05:20:12.0000000-05:00",
"Fri, 19 Mar 2021 05:20:12 GMT",
"2021-03-19 05:20:12 -5:00",
};
foreach (var ds in dates)
{
var dt = DateTime.Parse(ds);
Console.WriteLine(dt);
}
我们在数组中有一堆日期时间字符串。我们使用 DateTime.Parse 将它们转换为 DateTime 对象。
$ dotnet run 3/19/2021 7:20:58 AM 3/19/2021 12:00:00 AM 3/1/2021 12:00:00 AM 3/21/2022 12:00:00 AM 3/24/2022 4:00:00 AM 3/19/2021 6:20:12 AM 3/19/2021 11:20:12 AM 3/19/2021 6:20:12 AM 3/19/2021 11:20:12 AM
C# DateTime.ParseExact
使用 DateTime.ParseExact,我们显式指定日期时间字符串的格式。
using System.Globalization; var ds = "Thu Nov 11, 2021"; var dt = DateTime.ParseExact(ds, "ddd MMM dd, yyyy", CultureInfo.CurrentCulture); Console.WriteLine(dt); var ds2 = "10-22-2015"; var dt2 = DateTime.ParseExact(ds2, "MM-dd-yyyy", CultureInfo.CurrentCulture); Console.WriteLine(dt2);
DateTime.ParseExact 的第二个参数是日期时间字符串的格式。第三个参数是文化。
$ dotnet run 11/11/2021 12:00:00 AM 10/22/2015 12:00:00 AM
C# DateTime FormatException
如果 DateTime.Parse 方法失败,它会抛出一个 FormatException。
string ds = "11/31/2021";
try
{
DateTime dt = DateTime.Parse(ds);
Console.WriteLine($"{dt:d MMMM, yyyy}");
}
catch (FormatException e)
{
Console.WriteLine("failed to parse string");
Console.WriteLine(e);
}
在示例中,我们处理一个 FormatException。
$ dotnet run failed to parse string System.FormatException: String '11/31/2021' was not recognized as a valid DateTime. ...
C# DateTime.TryParse
DateTime.TryParse 方法将指定的日期时间字符串转换为 DateTime。它返回一个布尔值,指示转换是否成功。它将字符串解析到其参数中。
string ds = "11/31/2021";
DateTime dt;
var ok = DateTime.TryParse(ds, out dt);
if (ok)
{
Console.WriteLine($"{dt:d MMMM, yyyy}");
}
else
{
Console.WriteLine("failed to parse datetime string");
}
在示例中,我们尝试解析一个日期时间字符串。如果该方法成功,我们会打印解析后的对象;否则,我们会打印一个错误消息,表明它失败了。
C# DateTime.Parse 与 CultureInfo
日期和时间与文化有关。如果使用非默认文化,我们需要将文化信息传递给解析方法。
using System.Globalization;
string[] dates =
{
"piatok 12. novembra 2021 8:34:10",
"12. 11. 2021",
"pi, 12 nov 2021",
};
var skSk = new CultureInfo("sk-SK");
CultureInfo.DefaultThreadCurrentCulture = skSk;
foreach (var ds in dates)
{
var dt = DateTime.Parse(ds, skSk);
Console.WriteLine(dt);
}
在示例中,我们解析了用斯洛伐克文化编写的三个日期。文化作为 DateTime.Parse 方法的第二个参数传递。
$ dotnet run 12. 11. 2021 8:34:10 12. 11. 2021 0:00:00 12. 11. 2021 0:00:00
C# 解析 Last-Modified 标头值
Last-Modified 响应 HTTP 标头包含原始服务器认为资源上次修改的日期时间。
var url = "http://webcode.me";
using var client = new HttpClient();
var res = await client.GetAsync(url);
string lm = res.Content.Headers.GetValues("Last-Modified").First();
Console.WriteLine(lm);
var lmd = DateTime.Parse(lm);
Console.WriteLine(lmd);
在示例中,我们解析了 HTTP 响应的 Last-Modified 标头值。
$ dotnet run Sun, 23 Jan 2022 10:39:25 GMT 1/23/2022 11:39:25 AM
来源
在本文中,我们已将字符串解析为 C# 中的 DateTime 对象。
作者
列出所有 C# 教程。