如何比较datetimepicker中的两个日期

时间:2014-02-07 11:09:40

标签: c# date c#-2.0

我正在做Windows项目,其中我有两个DateTimePicker控件,一个用于StartDate,另一个用于EndDate。

在运行时,当用户从该控件中选择StartDate和EndDate时,它应该读取文本文件(即)log.txt&逐行搜索获得这些日期的匹配以及日期之间的匹配,并将数据写入文本框或标签控件

例如在日志文件中,数据如下:

3/12/2013 2:51:47 PM - ASDASDASD.D20131203145019 4/12/2013 2:52:23 PM - ASDDFSDSA.C20131203145019 2013年5月12日下午2:52:37 - SDASAFAS_20131203182101.D 2013年6月12日下午3:17:11 - RRRTWEWA_20131203184602.D00 2013年7月7日下午3:35:32 - XBCNXCXCXC.D0120131203153408

如果我从2013年12月5日到2013年12月7日进行搜索,则应检索:

2013年5月12日下午2:52:37 - SDASAFAS_20131203182101.D 2013年6月12日下午3:17:11 - RRRTWEWA_20131203184602.D00 2013年7月7日下午3:35:32 - XBCNXCXCXC.D0120131203153408

但到目前为止我得到了:

2013年5月12日下午2:52:37 - SDASAFAS_20131203182101.D 2013年7月7日下午3:35:32 - XBCNXCXCXC.D0120131203153408

我正在重温StartDate& EndDate匹配数据不在日期数据之间。

以下是我尝试过的一些编码:

try
{
    // ...

    string FDDate = FD.Date.ToString("M/d/yyyy");
    string TDDate = TD.Date.ToString("M/d/yyyy");

    string searchstring = EnterFileNameTextbox.Text.ToString();
    string searchfromdate = FromDateTimePicker.Value.ToShortDateString();
    string searchtodate = ToDateTimePicker.Value.ToShortDateString();

    string line;
    StringBuilder sb = new StringBuilder();
    int counter = 0;

    using (StreamReader file = new StreamReader(@"D:\log.txt"))
    {
        while ((line = file.ReadLine()) != null)
        {
            if (line.Contains(searchstring) && line.Contains(FDDate))
            {
                sb.AppendLine(line.ToString());
                counter++;
            }                      

            else if (line.Contains(searchstring) && !line.Contains(FDDate))
            {
                if (FD.Date < TD.Date)
                {                                
                    sb.AppendLine(line.ToString());
                    counter++;
                    FDDate = FD.Date.AddDays(1).ToShortDateString();
                }
                else if (FD.Date == TD.Date)
                {
                    FDDate = FD.Date.ToShortDateString();
                    sb.AppendLine(line.ToString());
                    counter++;
                }
            }
        }
    }   

    ResultTextBox.Text = sb.ToString();
    CountLabel.Text = counter.ToString();
}
catch (Exception ex)
{
    MessageBox.Show("The file could not be read");
    MessageBox.Show(ex.Message);
}

我不知道做循环。

2 个答案:

答案 0 :(得分:2)

我建议使用DateTime.TryParse(文档here)而不是转换。这将允许您提供有效的格式,处理失败(如果失败则转换将抛出)。

关于使用Date属性的部分似乎很好,比较运算符将按预期工作。

答案 1 :(得分:0)

尝试并在此处理DateTime数据类型,而不是将所有内容转换为字符串。从文件中读取该行后,解析出日期。假设它始终是文件中的第一个元素,后跟一个空格,您可以使用DateTime lineDate = DateTime.Parse(line.Split(" ")[0]);

来完成此操作

一旦您以该格式获得文件中的日期,并且从日期选择器中获得了DateTime fromDateDateTime toDate,就可以撰写if(lineDate >= fromDate && lineDate <= toDate) sb.AppendLine(line);