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);💡 开发小贴士
- 避免频繁的字符串转换:
原代码中多次使用
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01"))。这会产生不必要的开销。推荐使用new DateTime(year, month, day)构造函数。 - 处理时区:
如果您的应用是全球化的,请优先使用
DateTime.UtcNow获取标准时间,并在展示层转换为用户的本地时间。 - 格式化输出:
ToShortDateString():2026/1/12ToString("yyyy-MM-dd HH:mm:ss"):2026-01-12 21:01:58
C# 日期与时间操作指南:常用日期获取与计算方法
https://sw.rscclub.website/posts/csharpdatetimeff/