如何在C#中计算日期差:天数

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

过去了多少天?用C#解决这个永恒的问题



想象一下:您正在编写一个假期管理应用、任务规划器,或者只是想了解距离新年还有多少天。这时一个经典问题出现了:“如何在C#中计算两个日期之间的差值?”。这个问题是Stack Overflow上最热门的问题之一,这并不奇怪。处理日期是每个开发者都需要掌握的基础知识。



在本文中,我们不会只给出一个干巴巴的答案。我们将通过生动的示例进行全面讲解,揭示潜在的陷阱,并教您如何获取任意两个时间点之间的天数(以及更多)。开始吧!



最简单的方法:从一个日期中减去另一个日期



在C#中,有一个强大的结构体DateTime用于处理日期和时间。主要秘诀在于,如果您从一个DateTime对象中减去另一个DateTime对象,您得到的不是一个数字,而是一个特殊的对象——TimeSpan。它存储了差值。



基本示例:两个特定日期之间的天数差



假设您想知道从2024年3月1日到2024年5月10日过去了多少天。



using System;

class Program{ static void Main() { // 创建两个日期 DateTime startDate = new DateTime(2024, 3, 1); DateTime endDate = new DateTime(2024, 5, 10);

// 计算差值 TimeSpan difference = endDate - startDate;

// 获取完整的天数 int days = difference.Days;

Console.WriteLine($"相差天数: {days}"); // 输出: 相差天数: 70 }}


很简单,不是吗?-运算符为DateTime重载,并返回一个TimeSpan。.Days属性返回完整的天数(不考虑小时、分钟和秒)。



计算与“今天”的差值



通常需要计算从某个事件到当前时刻过去了多少天。为此,我们使用DateTime.Now或DateTime.Today。



DateTime today = DateTime.Today; // 仅日期,时间为00:00DateTime someDay = new DateTime(2025, 1, 1); // 2025年1月1日

TimeSpan diff = someDay - today;

Console.WriteLine($"距离新年还有: {diff.Days} 天");


请注意:DateTime.Today返回当前日期,时间设置为00:00:00。如果您不关心小时和分钟,这很方便。



如果需要的不仅仅是天数呢?



TimeSpan结构体不仅仅有.Days属性。它还有其他有用的属性,如果您决定扩展功能,这些属性会派上用场。



  • .Days — 完整的天数。
  • .Hours — 小时(0到23)。
  • .Minutes — 分钟。
  • .Seconds — 秒。
  • .TotalDays — 以小数表示的总天数(例如,70.5)。
  • .TotalHours — 总小时数。


TotalDays示例



假设两个日期之间的差正好是36小时。.Days属性将显示1(因为这是一个整天加12小时)。而.TotalDays将显示1.5。



DateTime start = new DateTime(2024, 1, 1, 0, 0, 0);DateTime end = new DateTime(2024, 1, 2, 12, 0, 0); // 1月1日 + 1天12小时

TimeSpan span = end - start;

Console.WriteLine($"天数(整数): {span.Days}"); // 1Console.WriteLine($"总天数: {span.TotalDays}"); // 1.5


如果您的任务只是了解完整的天数,请使用.Days。如果需要带有小数的精确值,请使用.TotalDays。

博客

书籍推荐