首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# DateTime 日期時間操作實用技巧大全

     編輯:關於C語言

前言

在開發報表、查詢或商務邏輯時,經常需要預設各種日期範圍(如「本年度」、「本季度」、「本月」、「本週」等)。C# 內建的 DateTime 結構功能強大,善用其屬性與方法可大幅簡化日期計算程式碼。本文整理常見的日期範圍計算模式,供開發者快速參考。

基礎日期取得

// 今天
DateTime.Now.Date.ToShortDateString();

// 昨天
DateTime.Now.AddDays(-1).ToShortDateString();

// 明天
DateTime.Now.AddDays(1).ToShortDateString();

本週範圍(週日~週六)

// 取得今天是星期幾(0=週日, 6=週六)
int dayOfWeek = (int)DateTime.Now.DayOfWeek;

// 本週第一天(週日)
DateTime.Now.AddDays(-dayOfWeek).ToShortDateString();

// 本週最後一天(週六)
DateTime.Now.AddDays(6 - dayOfWeek).ToShortDateString();

// 中文星期顯示技巧
string[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
string todayCh = weekDays[dayOfWeek];

上週 / 下週範圍

// 上週第一天
DateTime.Now.AddDays(-dayOfWeek - 7).ToShortDateString();
// 上週最後一天
DateTime.Now.AddDays(6 - dayOfWeek - 7).ToShortDateString();

// 下週第一天
DateTime.Now.AddDays(-dayOfWeek + 7).ToShortDateString();
// 下週最後一天
DateTime.Now.AddDays(6 - dayOfWeek + 7).ToShortDateString();

本月範圍

// 寫法一:字串拼接
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01"));                    // 月初
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).AddDays(-1); // 月底

// 寫法二:使用 DateTime 建構子(效能較佳)
new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);                 // 月初
new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(1).AddDays(-1); // 月底

上月 / 下月範圍

// 上月初
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(-1);
// 上月底
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddDays(-1);

// 下月初
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1);
// 下月底
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(2).AddDays(-1);

相對天數計算

// 7 天後
DateTime.Now.AddDays(7).ToShortDateString();
// 7 天前
DateTime.Now.AddDays(-7).ToShortDateString();

本年度範圍

// 年初
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01"));
// 年底
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).AddDays(-1);

上年度 / 下年度範圍

// 上年初
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(-1);
// 上年底
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddDays(-1);

// 下年初
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1);
// 下年底
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(2).AddDays(-1);

本季度範圍(關鍵技巧:利用月份模 3 運算)

int month = DateTime.Now.Month;
// 本季度第一個月
int firstMonthOfQuarter = month - (month - 1) % 3;

// 本季度第一天
DateTime.Now.AddMonths(-((month - 1) % 3)).ToString("yyyy-MM-01");

// 本季度最後一天(下季度第一天減一天)
DateTime.Parse(
    DateTime.Now.AddMonths(3 - ((month - 1) % 3)).ToString("yyyy-MM-01")
).AddDays(-1).ToShortDateString();

上季度 / 下季度範圍

// 下季度第一天
DateTime.Now.AddMonths(3 - ((month - 1) % 3)).ToString("yyyy-MM-01");
// 下季度最後一天
DateTime.Parse(
    DateTime.Now.AddMonths(6 - ((month - 1) % 3)).ToString("yyyy-MM-01")
).AddDays(-1).ToShortDateString();

// 上季度第一天
DateTime.Now.AddMonths(-3 - ((month - 1) % 3)).ToString("yyyy-MM-01");
// 上季度最後一天
DateTime.Parse(
    DateTime.Now.AddMonths(-((month - 1) % 3)).ToString("yyyy-MM-01")
).AddDays(-1).ToShortDateString();

最佳實務建議

  • 優先使用 DateTime 建構子與 AddDays/AddMonths/AddYears 方法,避免字串解析的效能損耗。
  • 將常用日期範圍計算封裝為靜態工具類別(如 DateTimeHelper),提高程式碼復用性與可維護性。
  • 注意時區與文化特性(CultureInfo)對 ToShortDateString 輸出格式的影響,正式環境建議明確指定格式字串(如 yyyy-MM-dd)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved