ZetCode

C# DateTime 格式

最后修改于 2023 年 7 月 5 日

在本文中,我们将展示如何在 C# 中格式化 DateTime 对象。

C# DateTime

DateTime 值类型表示日期和时间,值的范围从公元 (Common Era) 0001 年 1 月 1 日 00:00:00(午夜)到公元 (C.E.) 9999 年 12 月 31 日 23:59:59,采用公历。

格式化方法

要格式化 DateTime 对象,我们可以使用 DateTime.ToStringString.Format 或内插字符串语法,例如 $"{now:D}"

C# 标准格式说明符

标准日期时间格式字符串使用单个字符格式说明符来定义 DateTime 值的文本表示形式。 例如,D 格式说明符表示长日期格式。

说明符含义示例
D长日期2022年3月26日 星期六
d短日期3/26/2022
F完整长日期2022年3月26日 星期六 下午12:59:46
f完整短日期2022年3月26日 星期六 下午12:59
G常规长日期3/26/2022 下午12:59:46
g常规短日期3/26/2022 下午12:59
U通用完整日期2022年3月26日 星期六 上午11:59:46
u通用可排序2022-03-26 12:59:46Z
s可排序2022-03-26T12:59:46
T长时间下午12:59:46
t短时间下午12:59
OISO 86012022-03-26T12:59:46.7831825+01:00
RRFC 1123Sat, 26 Mar 2022 12:59:46 GMT
M月份3月26日
Y年月2022年3月

该表列出了 C# 中的标准日期时间格式说明符。

Program.cs
var now = DateTime.Now;

Console.WriteLine(now.ToString("D"));
Console.WriteLine(now.ToString("d"));
Console.WriteLine(now.ToString("F"));
Console.WriteLine(now.ToString("f"));
Console.WriteLine(now.ToString("G"));
Console.WriteLine(now.ToString("g"));
Console.WriteLine(now.ToString("U"));
Console.WriteLine(now.ToString("u"));
Console.WriteLine(now.ToString("s"));
Console.WriteLine(now.ToString("T"));
Console.WriteLine(now.ToString("t"));
Console.WriteLine(now.ToString("O"));
Console.WriteLine(now.ToString("R"));
Console.WriteLine(now.ToString("M"));
Console.WriteLine(now.ToString("Y"));

在该示例中,我们在 DateTime.ToString 方法中使用标准日期时间格式说明符来打印当前日期时间。

$ dotnet run 
Saturday, March 26, 2022
3/26/2022
Saturday, March 26, 2022 1:15:12 PM
Saturday, March 26, 2022 1:15 PM
3/26/2022 1:15:12 PM
3/26/2022 1:15 PM
Saturday, March 26, 2022 12:15:12 PM
2022-03-26 13:15:12Z
2022-03-26T13:15:12
1:15:12 PM
1:15 PM
2022-03-26T13:15:12.6729121+01:00
Sat, 26 Mar 2022 13:15:12 GMT
March 26
March 2022

Program.cs
var now = DateTime.Now;

Console.WriteLine($"{now:D}");
Console.WriteLine($"{now:d}");
Console.WriteLine($"{now:F}");
Console.WriteLine($"{now:f}");
Console.WriteLine($"{now:G}");
Console.WriteLine($"{now:g}");
Console.WriteLine($"{now:U}");
Console.WriteLine($"{now:u}");
Console.WriteLine($"{now:s}");
Console.WriteLine($"{now:T}");
Console.WriteLine($"{now:t}");
Console.WriteLine($"{now:O}");
Console.WriteLine($"{now:R}");
Console.WriteLine($"{now:M}");
Console.WriteLine($"{now:Y}");

在该示例中,我们在内插字符串中使用标准日期时间格式说明符来打印当前日期时间。

C# 特定于文化的标准格式说明符

我们可以将 CultureInfo 传递给格式化方法。

Program.cs
using System.Globalization;

var now = DateTime.Now;

var ci = CultureInfo.CreateSpecificCulture("sk-SK");
CultureInfo.DefaultThreadCurrentCulture = ci;

Console.WriteLine(now.ToString("D"));
Console.WriteLine(now.ToString("d"));
Console.WriteLine(now.ToString("F"));
Console.WriteLine(now.ToString("f"));
Console.WriteLine(now.ToString("G"));
Console.WriteLine(now.ToString("g"));
Console.WriteLine(now.ToString("U"));
Console.WriteLine(now.ToString("u"));
Console.WriteLine(now.ToString("s"));
Console.WriteLine(now.ToString("T"));
Console.WriteLine(now.ToString("t"));
Console.WriteLine(now.ToString("O"));
Console.WriteLine(now.ToString("R"));
Console.WriteLine(now.ToString("M"));
Console.WriteLine(now.ToString("Y"));

在该示例中,我们使用斯洛伐克文化的标准日期时间格式说明符打印当前日期时间。

$ dotnet run 
sobota 26. marca 2022
26. 3. 2022
sobota 26. marca 2022 13:22:00
sobota 26. marca 2022 13:22
26. 3. 2022 13:22:00
26. 3. 2022 13:22
sobota 26. marca 2022 12:22:00
2022-03-26 13:22:00Z
2022-03-26T13:22:00
13:22:00
13:22
2022-03-26T13:22:00.4524483+01:00
Sat, 26 Mar 2022 13:22:00 GMT
26. marca
marec 2022

C# 自定义日期时间格式说明符

自定义日期时间格式说明符是其他说明符,允许我们构建自己的日期时间格式。

说明符含义
d月份中的某天,从 1 到 31。
dd月份中的某天,从 01 到 31。
ddd星期几的缩写名称。
dddd星期几的全名。
f日期和时间值中的十分之一秒。
ff日期和时间值中的百分之一秒。
fff日期和时间值中的毫秒。
ffff日期和时间值中的万分之一秒。
fffff日期和时间值中的十万分之一秒。
ffffff日期和时间值中的百分之一秒。
fffffff日期和时间值中的百万分之一秒。
ffffffff日期和时间值中的千万分之一秒。
g/gg时期或时代。
h小时,使用 12 小时制时钟,从 1 到 12。
hh小时,使用 12 小时制时钟,从 01 到 12。
H小时,使用 24 小时制时钟,从 0 到 23。
HH小时,使用 24 小时制时钟,从 00 到 23。
K时区信息。
m分钟,从 0 到 59。
mm分钟,从 00 到 59。
M月份,从 1 到 12。
MM月份,从 01 到 12。
MMM月份的缩写名称。
MMMM月份的全名。
s秒,从 0 到 59。
ss秒,从 00 到 59。
tAM/PM 指示符的第一个字符。
ttAM/PM 指示符。
y年份,从 0 到 99。
yy年份,从 00 到 99。
yyy年份,最少三位数字。
yyyy年份,以四位数数字表示。
yyyyy年份,以五位数数字表示。
z与 UTC 的小时偏移量,没有前导零。
zz与 UTC 的小时偏移量,对于个位数的值,带有前导零。
zzz与 UTC 的小时和分钟偏移量。

该表显示了 C# 中的自定义日期时间格式说明符。

Program.cs
var now = DateTime.Now;

Console.WriteLine(now.ToString("M/d/yy"));
Console.WriteLine(now.ToString("MM/dd/yyyy"));
Console.WriteLine(now.ToString("yy-MM-dd"));
Console.WriteLine(now.ToString("yy-MMM-dd ddd"));
Console.WriteLine(now.ToString("yyyy-M-d dddd"));
Console.WriteLine(now.ToString("yyyy MMMM dd"));
Console.WriteLine(now.ToString("h:mm:ss tt zzz"));
Console.WriteLine(now.ToString("HH:m:s tt zzz"));
Console.WriteLine(now.ToString("hh:mm:ss t z"));
Console.WriteLine(now.ToString("HH:mm:ss tt zz"));

在该示例中,我们构建了一些自定义日期时间格式。

$ dotnet run
3/26/22
03/26/2022
22-03-26
22-Mar-26 Sat
2022-3-26 Saturday
2022 March 26
1:44:03 PM +01:00
13:44:3 PM +01:00
01:44:03 P +1
13:44:03 PM +01

使用格式说明符解析日期时间字符串

在将日期时间字符串解析为 DateTime 对象时,可以使用标准和自定义 DateTime 格式说明符。

Program.cs
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/2021";
var dt2 = DateTime.ParseExact(ds2, "d", CultureInfo.CurrentCulture);
Console.WriteLine(dt2);

在该示例中,我们将日期时间格式说明符传递给 DateTime.ParseExact 方法。

$ dotnet run
11/11/2021 12:00:00 AM
10/22/2021 12:00:00 AM

来源

自定义日期和时间格式字符串

在本文中,我们已经格式化了 C# 中的 DateTime 对象。

作者

我的名字是 Jan Bodnar,我是一位热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我已撰写超过 1,400 篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 C# 教程