首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 時間範圍合法性驗證:業務規則與基礎邏輯

     編輯:程式設計綜合問答

核心判斷標準

「時間範圍合法」在 C# 中至少包含:

  1. 開始時間 ≤ 結束時間 (最基本邏輯)。
  2. 業務規則:如「查詢範圍不超過 1 年」、「結束時間不晚於今天」、「開始時間不早於系統上線日期」等。

基礎代碼實現

public bool IsValidRange(DateTime start, DateTime end, out string errorMsg) {
    errorMsg = null;

    if (start > end) {
        errorMsg = "開始時間不能晚於結束時間";
        return false;
    }

    // 業務規則示例 (根據實際需求調整)
    if (end > DateTime.Today) {
        errorMsg = "結束時間不能晚於今天";
        return false;
    }

    if ((end - start).TotalDays > 365) {
        errorMsg = "查詢範圍不能超過 365 天";
        return false;
    }

    if (start < new DateTime(2020, 1, 1)) {
        errorMsg = "數據僅保留 2020 年至今";
        return false;
    }

    return true;
}

UI 層調用示例 (WinForms/WPF)

private void btnQuery_Click(object sender, EventArgs e) {
    if (!DateTime.TryParse(txtStart.Text, out var start) ||
        !DateTime.TryParse(txtEnd.Text, out var end)) {
        MessageBox.Show("日期格式不正確");
        return;
    }

    if (IsValidRange(start, end, out string msg)) {
        LoadData(start, end);
    } else {
        MessageBox.Show(msg, "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    }
}

進階:FluentValidation 統一驗證 (推薦)

public class QueryRequestValidator : AbstractValidator {
    public QueryRequestValidator() {
        RuleFor(x => x.StartTime)
            .NotEmpty().WithMessage("開始時間必填")
            .LessThanOrEqualTo(x => x.EndTime).WithMessage("開始時間不能晚於結束時間")
            .GreaterThanOrEqualTo(new DateTime(2020,1,1)).WithMessage("不支持 2020 年前數據");

        RuleFor(x => x.EndTime)
            .NotEmpty().WithMessage("結束時間必填")
            .LessThanOrEqualTo(DateTime.Today).WithMessage("結束時間不能晚於今天");

        RuleFor(x => x)
            .Must(x => (x.EndTime - x.StartTime).TotalDays <= 365)
            .WithMessage("查詢範圍不能超過 365 天");
    }
}

總結

C# 中 DateTime 直接支持比較運算符 (<, >, <=, >=),無需轉換毫秒數。驗證邏輯核心是 基礎邏輯 + 業務規則,建議使用驗證框架集中管理,避免分散在各事件處理器中。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved