ZetCode

C# DateOnly

最后修改于 2023 年 7 月 5 日

在本文中,我们将展示如何在 C# 中使用 DateOnly 类型。

DateOnly 表示日期,其值范围为公元 0001 年 1 月 1 日到公元 9999 年 12 月 31 日(公历)。 类似地,TimeOnly 表示一天中的时间。

DateOnly 是位于 System 命名空间中的一个结构体。 它在 .NET 6 中引入。

C# DateOnly 简单示例

以下是一个 DateOnly 的简单示例。

Program.cs
using System.Globalization;

DateOnly d1 = new DateOnly(2022, 10, 12);
Console.WriteLine(d1);

DateOnly d2 = new DateOnly(2022, 10, 12, new GregorianCalendar());
Console.WriteLine(d2);

DateOnly d3 = new DateOnly(2022, 10, 12, new JulianCalendar());
Console.WriteLine(d3);

该程序创建了三个 DateOnly 实例。

DateOnly d1 = new DateOnly(2022, 10, 12);

在第一种情况下,构造函数接受年、月和日参数。

DateOnly d2 = new DateOnly(2022, 10, 12, new GregorianCalendar());

在第二种情况下,构造函数还接受日历作为参数。

$ dotner run
10/12/2022
10/12/2022
10/25/2022

C# DateOnly 最小值和最大值

DateOnly.MaxValue 返回可以创建的最新日期。 DateOnly.MinValue 获取可以创建的最早日期。

Program.cs
DateOnly maxVal = DateOnly.MaxValue;
DateOnly minVal = DateOnly.MinValue;

Console.WriteLine(minVal);
Console.WriteLine(maxVal);

该程序打印 DateOnly 类型可以表示的最小值和最大值。

$ dotnet run
1/1/0001
12/31/9999

C# 比较 DateOnly

我们可以使用关系运算符比较 DateTime 实例。

Program.cs
DateOnly d1 = new DateOnly(2022, 10, 12);
DateOnly d2 = new DateOnly(2022, 11, 12);

if (d1 < d2) {
    Console.WriteLine($"{d1} is before {d2}");
} else {
    Console.WriteLine($"{d1} is after {d2}");
}

该程序使用 < 运算符比较两个 DateTime 类型。

$ dotnet run
10/12/2022 is before 11/12/2022

C# DateOnly.FromDateTime

DateOnly.FromDateTime 方法从 DateTime 对象创建一个 DateOnly 实例。

Program.cs
DateTime now = DateTime.Now;
Console.WriteLine(now);

DateOnly d = DateOnly.FromDateTime(now);
Console.WriteLine(d);

TimeOnly t = TimeOnly.FromDateTime(now);
Console.WriteLine(t);

该程序计算当前的日期时间,并从中提取日期和时间。

DateOnly d = DateOnly.FromDateTime(now);
Console.WriteLine(d);

我们使用 DateOnly.FromDateTime 检索日期部分。

TimeOnly t = TimeOnly.FromDateTime(now);

我们使用 TimeOnly.FromDateTime 检索时间部分。

$ dotnet run
10/13/2022 5:31:17 PM
10/13/2022
5:31 PM

C# DateOnly 短日期和长日期

默认的 DateOnly 格式是短日期字符串。 使用 ToLongDateString 方法,我们可以获得长日期字符串表示形式。

Program.cs
DateOnly d = new DateOnly(2022, 10, 12);

Console.WriteLine(d);
Console.WriteLine(d.ToShortDateString());
Console.WriteLine(d.ToLongDateString());

该程序以短日期和长日期格式打印 DateOnly

$ dotnet run
10/12/2022
10/12/2022
Wednesday, October 12, 2022

C# DateOnly 添加年、月和日

AddYearsAddMonthsAddDays 方法将年、月和日添加到 DateTime 实例。

Program.cs
DateOnly d = new DateOnly(2022, 10, 10);
var res1 = d.AddYears(2).AddMonths(11).AddDays(3);
Console.WriteLine(res1);

var res2 = d.AddYears(-2).AddMonths(-11).AddDays(-3);
Console.WriteLine(res2);

在该程序中,我们使用了这三个方法。

$ dotnet run
9/13/2025
11/7/2019

C# DateTime TryParse

TryParse 方法将字符串转换为 DateTime

Program.cs
using System.Globalization;

if (DateOnly.TryParse("10/9/2022", new CultureInfo("en-US"),
    DateTimeStyles.None, out var res))
{
    Console.WriteLine(res.ToLongDateString());
}

if (DateOnly.TryParse("10/9/2022", new CultureInfo("sk-SK"),
    DateTimeStyles.None, out var res2))
{
    Console.WriteLine(res2.ToLongDateString());
}

10/9/2022 日期格式在美国和斯洛伐克文化中有不同的含义。

$ dotnet run
Sunday, October 9, 2022
Saturday, September 10, 2022

来源

DateOnly 结构体

在本文中,我们展示了如何在 C# 中使用 DateOnly 类型。

作者

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

列出所有 C# 教程