日期运算
添加、减去并比较日期。
日期运算 是 CoddyKit 上的免费 C# Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 4 节课。
对日期进行运算
DateTime 值是不可变的:运算不会改变原始值。相反,每次运算都会返回一个全新的 DateTime。
本课将介绍如何添加和减去时间、比较日期,以及回答“距离某个事件还有多少天”等问题。
AddDays
AddDays 方法会返回晚若干天的日期。传入负数即可向过去移动。
由于 DateTime 是不可变的,您必须使用返回的值;原始值不会发生变化。
using System;
class Program
{
static void Main()
{
DateTime d = new DateTime(2024, 3, 5);
DateTime later = d.AddDays(10);
Console.WriteLine(later.ToString("yyyy-MM-dd"));
}
}Add 方法族
每个时间单位都有对应的 Add 方法:AddHours、AddMinutes、AddSeconds、AddMonths 和 AddYears。
它们都接受正数或负数,因此同一组方法既可以处理未来,也可以处理过去。
using System;
class Program
{
static void Main()
{
DateTime d = new DateTime(2024, 3, 5, 9, 0, 0);
Console.WriteLine(d.AddHours(5).Hour);
}
}AddMonths 处理溢出
AddMonths 会智能处理每月天数。将 1 月 31 日加上一个月会得到 2 月 28 日或 29 日,而不会得到无效日期。
这样就不必手动检查每个月有多少天。
using System;
class Program
{
static void Main()
{
DateTime d = new DateTime(2024, 1, 31);
Console.WriteLine(d.AddMonths(1).ToString("yyyy-MM-dd"));
}
}向过去移动
要移动到过去,请传入负参数。AddDays(-7) 会得到早一周的日期。
没有单独的减天数方法;使用负值就能简洁地实现相同效果。
using System;
class Program
{
static void Main()
{
DateTime d = new DateTime(2024, 3, 5);
Console.WriteLine(d.AddDays(-7).ToString("yyyy-MM-dd"));
}
}添加 TimeSpan
您可以使用 + 运算符或 Add 方法,直接将 TimeSpan 添加到 DateTime。
当您已经有一个持续时间,并希望据此调整日期时,这种方式非常方便。
using System;
class Program
{
static void Main()
{
DateTime d = new DateTime(2024, 3, 5, 9, 0, 0);
DateTime later = d + TimeSpan.FromHours(3);
Console.WriteLine(later.Hour);
}
}日期之间的差值
从一个日期中减去另一个日期,会得到描述两者间隔的 TimeSpan。
读取 TotalDays 即可计算它们相差的天数,即使两个日期跨越了月份或年份也适用。
using System;
class Program
{
static void Main()
{
DateTime start = new DateTime(2024, 1, 1);
DateTime end = new DateTime(2024, 3, 1);
Console.WriteLine((end - start).TotalDays);
}
}距事件还有多少天
一个常见任务是计算距离未来某个日期还有多少天。用目标日期减去今天,然后读取 TotalDays 或 Days。
在这里使用固定日期,可以让学习过程中的输出保持可预测。
using System;
class Program
{
static void Main()
{
DateTime today = new DateTime(2024, 3, 1);
DateTime party = new DateTime(2024, 3, 15);
Console.WriteLine((party - today).Days);
}
}比较日期
DateTime 值可以使用 <、> 和 == 进行比较。较早的日期小于较晚的日期。
如果需要正式的比较结果,还可以使用 CompareTo 和 Equals 等方法。
using System;
class Program
{
static void Main()
{
DateTime a = new DateTime(2024, 1, 1);
DateTime b = new DateTime(2024, 6, 1);
Console.WriteLine(a < b);
}
}闰年和月份天数
两个静态辅助方法可以回答日历相关的问题。DateTime.IsLeapYear(year) 会在年份为闰年时返回真值。
DateTime.DaysInMonth(year, month) 会告诉您指定月份有多少天,并正确处理二月。
using System;
class Program
{
static void Main()
{
Console.WriteLine(DateTime.IsLeapYear(2024));
Console.WriteLine(DateTime.DaysInMonth(2024, 2));
}
}一天的开始与结束
要获取一天的开始时间,请使用 Date 属性;它会将时间截去并设为午夜。
要获取一天的最后时刻,可以先加一天再减去一个刻度,或者加上 23:59:59。Date 属性是最简单的基础。
using System;
class Program
{
static void Main()
{
DateTime d = new DateTime(2024, 3, 5, 14, 30, 0);
Console.WriteLine(d.Date.ToString("yyyy-MM-dd HH:mm"));
}
}快速检查
从 2024 年 1 月 31 日开始并调用 AddMonths(1),您会得到什么日期?
回顾
DateTime 运算会返回新值。使用 AddDays、AddMonths 及其他类似方法调整日期,使用负数即可向过去移动。
相减日期可以得到 TimeSpan,使用运算符进行比较,并使用 IsLeapYear、DaysInMonth 和 Date 完成日历相关任务。
用 AI 导师学习 C# — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 93
- 课程
- 346
常见问题解答
「日期运算」课时是免费的吗?
是的 — 「日期运算」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 4 节课。
「日期运算」这节课中我会学到什么?
添加、减去并比较日期。 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C# Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「日期运算」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C# Academy 课中编写并运行代码吗?
能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。