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

C# DateTime 日期範圍常用計算技巧大全

     編輯:關於C語言

基本單日運算

// 今天
string today = DateTime.Now.ToString("yyyy-MM-dd");
// 昨天
string yesterday = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
// 明天
string tomorrow = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd");

週區間 (週日~週六)

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

// 本週起訖
string weekStart = DateTime.Now.AddDays(-dayOfWeek).ToString("yyyy-MM-dd");      // 週日
string weekEnd   = DateTime.Now.AddDays(6 - dayOfWeek).ToString("yyyy-MM-dd");   // 週六

// 上週
string lastWeekStart = DateTime.Now.AddDays(-dayOfWeek - 7).ToString("yyyy-MM-dd");
string lastWeekEnd   = DateTime.Now.AddDays(6 - dayOfWeek - 7).ToString("yyyy-MM-dd");

// 下週
string nextWeekStart = DateTime.Now.AddDays(-dayOfWeek + 7).ToString("yyyy-MM-dd");
string nextWeekEnd   = DateTime.Now.AddDays(6 - dayOfWeek + 7).ToString("yyyy-MM-dd");

月區間

// 本月首尾日 (推薦用格式化字串,簡潔不易錯)
string monthStart = DateTime.Now.ToString("yyyy-MM-01");
string monthEnd = DateTime.Parse(monthStart).AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd");

// 上月
string lastMonthStart = DateTime.Parse(monthStart).AddMonths(-1).ToString("yyyy-MM-dd");
string lastMonthEnd = DateTime.Parse(monthStart).AddDays(-1).ToString("yyyy-MM-dd");

// 下月
string nextMonthStart = DateTime.Parse(monthStart).AddMonths(1).ToString("yyyy-MM-dd");
string nextMonthEnd = DateTime.Parse(monthStart).AddMonths(2).AddDays(-1).ToString("yyyy-MM-dd");

年區間

// 本年度
string yearStart = DateTime.Now.ToString("yyyy-01-01");
string yearEnd = DateTime.Parse(yearStart).AddYears(1).AddDays(-1).ToString("yyyy-MM-dd");

// 上年度
string lastYearStart = DateTime.Parse(yearStart).AddYears(-1).ToString("yyyy-MM-dd");
string lastYearEnd = DateTime.Parse(yearStart).AddDays(-1).ToString("yyyy-MM-dd");

// 下年度
string nextYearStart = DateTime.Parse(yearStart).AddYears(1).ToString("yyyy-MM-dd");
string nextYearEnd = DateTime.Parse(yearStart).AddYears(2).AddDays(-1).ToString("yyyy-MM-dd");

季度區間 (關鍵技巧:利用模運算對齊季首月)

// 目前月份 (1-12)
int m = DateTime.Now.Month;

// 本季度第一個月 (1,4,7,10)
int quarterStartMonth = m - (m - 1) % 3;
string quarterStart = new DateTime(DateTime.Now.Year, quarterStartMonth, 1).ToString("yyyy-MM-dd");
// 本季度最後一天 = 下季度第一天 - 1 天
string quarterEnd = new DateTime(DateTime.Now.Year, quarterStartMonth + 3, 1).AddDays(-1).ToString("yyyy-MM-dd");

// 上季度
string lastQuarterStart = new DateTime(DateTime.Now.Year, quarterStartMonth - 3, 1).ToString("yyyy-MM-dd");
string lastQuarterEnd = new DateTime(DateTime.Now.Year, quarterStartMonth, 1).AddDays(-1).ToString("yyyy-MM-dd");

// 下季度
string nextQuarterStart = new DateTime(DateTime.Now.Year, quarterStartMonth + 3, 1).ToString("yyyy-MM-dd");
string nextQuarterEnd = new DateTime(DateTime.Now.Year, quarterStartMonth + 6, 1).AddDays(-1).ToString("yyyy-MM-dd");

相對天數區間

// 近 7 天 (含今天)
string last7Start = DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd");
string last7End = DateTime.Now.ToString("yyyy-MM-dd");

// 近 30 天
string last30Start = DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd");
string last30End = DateTime.Now.ToString("yyyy-MM-dd");

中文星期顯示

string[] weekNames = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
string todayChi = weekNames[(int)DateTime.Now.DayOfWeek];

封裝成通用工具類別

public static class DateRangeHelper {
    public static (DateTime Start, DateTime End) GetWeekRange(DateTime? baseDate = null) {
        DateTime d = baseDate ?? DateTime.Today;
        int dow = (int)d.DayOfWeek;
        return (d.AddDays(-dow), d.AddDays(6 - dow));
    }

    public static (DateTime Start, DateTime End) GetMonthRange(DateTime? baseDate = null) {
        DateTime d = baseDate ?? DateTime.Today;
        DateTime start = new DateTime(d.Year, d.Month, 1);
        return (start, start.AddMonths(1).AddDays(-1));
    }

    public static (DateTime Start, DateTime End) GetQuarterRange(DateTime? baseDate = null) {
        DateTime d = baseDate ?? DateTime.Today;
        int qStartMonth = d.Month - (d.Month - 1) % 3;
        DateTime start = new DateTime(d.Year, qStartMonth, 1);
        return (start, start.AddMonths(3).AddDays(-1));
    }

    public static (DateTime Start, DateTime End) GetYearRange(DateTime? baseDate = null) {
        DateTime d = baseDate ?? DateTime.Today;
        DateTime start = new DateTime(d.Year, 1, 1);
        return (start, start.AddYears(1).AddDays(-1));
    }
}

使用範例

var (qStart, qEnd) = DateRangeHelper.GetQuarterRange();
string sql = $"SELECT * FROM Sales WHERE OrderDate BETWEEN '{qStart:yyyy-MM-dd}' AND '{qEnd:yyyy-MM-dd}'";
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved