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

时间:2014-10-09 05:47:58

标签: c# winforms datetime

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

代码隐藏:

// 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;

2 个答案:

答案 0 :(得分:1)

方法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)));

答案 1 :(得分:0)

我发布此帖作为答案,以便我可以发布代码。我刚刚这样做了:

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");
}

我进入&#34; 091014&#34;在我的TextBox中,消息称Atrue。同样适用于&#34; 101012&#34;和&#34; 101014&#34;。除非你的系统上有什么东西是腐败的,否则它不是代码,而是你错了。测试确切的代码,看看你是否得到相同的结果。