【问题标题】:how to compare two dates in datetimepicker如何比较 datetimepicker 中的两个日期
【发布时间】:2017-02-10 21:46:47
【问题描述】:

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

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

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

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

但到目前为止我得到:

2013 年 5 月 12 日下午 2:52:37 - SDASAFAS_20131203182101.D 2013 年 7 月 12 日下午 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);
}

我不知道做循环。

【问题讨论】:

  • 要么将时间设置为相同,要么将日期提取为字符串以获得一些想法。

标签: c# date c#-2.0


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 顺便说一句:在 DateTime 解析中假设文化时要小心。您假设北美日期格式(正如我在答案中所做的那样),但如果日志文件使用 m/d/yyyy 但用户处于日期格式为 d/m/ 的文化中,这将不起作用yyyy。如果日志文件总是采用相同的格式,最好明确指定日期格式。
    猜你喜欢
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多