509 字
3 分钟
C# 日期与时间操作指南:常用日期获取与计算方法

在 C# 中,我们经常需要处理日期和时间。通过 DateTime 类,可以轻松获取和操作日期,下面我们为您整理了常用的日期操作方法,并给出具体的例子,帮助您更好地理解如何在代码中使用它们。

这篇文章为您提供了 C# 中处理日期与时间的基础及进阶操作。为了提升代码的可维护性与执行效率,我优化了原有的计算逻辑(减少了繁琐的字符串转换),并整理为更易读的代码块。


1. 基础日期获取#

在 C# 中,DateTime.Now 包含时间,而 DateTime.Today 默认时间为 00:00:00

功能优化后的核心代码示例结果 (假设今日 2026/01/12)
今日DateTime.Today.ToShortDateString()2026/1/12
昨日DateTime.Today.AddDays(-1)2026/1/11
明日DateTime.Today.AddDays(1)2026/1/13
星期几DateTime.Now.ToString("dddd")星期一

2. 周/月/季度的范围计算#

直接对日期对象进行数学运算,比通过 ToString 解析字符串更安全且性能更好。

📅 周日期范围(以周一为首日)#

// 这里的逻辑考虑了 DayOfWeek.Sunday = 0 的情况
int offset = (int)DateTime.Today.DayOfWeek;
offset = offset == 0 ? 7 : offset; // 将周日视为第7天
DateTime weekStart = DateTime.Today.AddDays(1 - offset); // 本周一
DateTime weekEnd = weekStart.AddDays(6); // 本周日

🌙 月份日期范围#

DateTime monthStart = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1);
DateTime monthEnd = monthStart.AddMonths(1).AddDays(-1);
// 上月范围
DateTime lastMonthStart = monthStart.AddMonths(-1);
DateTime lastMonthEnd = monthStart.AddDays(-1);

🛠️ 季度日期范围#

int quarterStartMonth = ((DateTime.Today.Month - 1) / 3) * 3 + 1;
DateTime quarterStart = new DateTime(DateTime.Today.Year, quarterStartMonth, 1);
DateTime quarterEnd = quarterStart.AddMonths(3).AddDays(-1);

3. 年度日期范围#

DateTime yearStart = new DateTime(DateTime.Today.Year, 1, 1);
DateTime yearEnd = new DateTime(DateTime.Today.Year, 12, 31);
// 上一年范围
DateTime lastYearStart = yearStart.AddYears(-1);
DateTime lastYearEnd = yearStart.AddDays(-1);

💡 开发小贴士#

  1. 避免频繁的字符串转换: 原代码中多次使用 DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01"))。这会产生不必要的开销。推荐使用 new DateTime(year, month, day) 构造函数。
  2. 处理时区: 如果您的应用是全球化的,请优先使用 DateTime.UtcNow 获取标准时间,并在展示层转换为用户的本地时间。
  3. 格式化输出
  • ToShortDateString(): 2026/1/12
  • ToString("yyyy-MM-dd HH:mm:ss"): 2026-01-12 21:01:58
C# 日期与时间操作指南:常用日期获取与计算方法
https://sw.rscclub.website/posts/csharpdatetimeff/
作者
杨月昌
发布于
2020-06-16
许可协议
CC BY-NC-SA 4.0