如何检查两个日期之间的日期(不是SQL)

本文关键字:日期 之间 不是 SQL 两个 何检查 检查 | 更新日期: 2023-09-27 18:25:58

在我的WinForm中,用户在文本框中输入日期为'210514'或'231113(ddmmyy格式)假设今天的日期=2014年10月29日。使用Visual Studio 2010 C#4.0。电脑日期时间设置:GMT+08:00 dd MMM yy。

CodeBehind:

// Split the input string into YYMMDD format and set it to a date object
DateTime inputDate = new DateTime(Convert.ToInt32(input.Substring(4, 2)), Convert.ToInt32(input.Substring(2, 2)), Convert.ToInt32(input.Substring(0, 2)));

//WinForm允许用户输入日期,不早于今天日期前2年,也不超过今天日期后1个月。

DateTime minDate = DateTime.Now.AddMonths(-24);
DateTime maxDate = DateTime.Now.AddMonths(1);

我尝试了很多方法,但都不起作用(我也检查了很多线程/论坛)。

//Method 1
if(inputDate >= minDate && inputDate <= maxDate)
    return true
//Method 2: B return true but A ***always*** return false, Why??
if (inputDate >= minDate)
    A = true;
if (inputDate <= maxDate)
    B = true;
//Method 3: B return true but A ***always*** return false, Why??
if ((DateTime.Now - inputDate).Days >= (DateTime.Now - minDate).Days)
    A = true;
if (inputDate <= maxDate)
    B = true;

如何检查两个日期之间的日期(不是SQL)

方法A是正确的,如果使用调试器,您就会明白为什么它不起作用。

string input = "291014";
DateTime inputDate = new DateTime(
    Convert.ToInt32(input.Substring(4, 2)),
    Convert.ToInt32(input.Substring(2, 2)),
    Convert.ToInt32(input.Substring(0, 2)));
Console.WriteLine(inputDate.Year); // 14, oops
Console.WriteLine(DateTime.Now.Year); // 2014

要修复它,请在的年份中添加2000

DateTime inputDate = new DateTime(
    2000 + Convert.ToInt32(input.Substring(4, 2)),
    Convert.ToInt32(input.Substring(2, 2)),
    Convert.ToInt32(input.Substring(0, 2)));

我将此作为答案发布,以便发布代码。我刚刚做了这个:

DateTime inputDate;
if (DateTime.TryParseExact(this.textBox1.Text, "ddMMyy", null, DateTimeStyles.None, out inputDate))
{
    var minDate = DateTime.Today.AddYears(-2);
    var maxDate = DateTime.Today.AddMonths(1);
    var A = inputDate >= minDate;
    var B = inputDate <= maxDate;
    MessageBox.Show(string.Format("input: {1:d}{0}min: {2:d}{0}max: {3:d}{0}A: {4}{0}B: {5}",
                                  Environment.NewLine,
                                  inputDate,
                                  minDate,
                                  maxDate,
                                  A,
                                  B));
}
else
{
    MessageBox.Show("Invalid input");
}

我在我的TextBox中输入了"091014",消息说Atrue。"101012"answers"101014"也是如此。除非你的系统中有什么东西损坏了,否则不是代码,而是你错了。测试那个确切的代码,看看你是否得到了同样的结果。