簡體   English   中英

如何在datetimepicker中比較兩個日期

[英]how to compare two dates in datetimepicker

我正在執行Windows項目,其中有兩個DateTimePicker控件,一個用於StartDate,另一個用於EndDate。

在運行時,當用戶從該控件中選擇StartDate和EndDate時,應讀取textfile(即log.txt)並逐行搜索以獲取這些日期和日期之間的匹配,並將數據寫入到文本框或標簽控件

對於例如在日志文件中,數據如下:

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

如果我從2013年12月5日到2013年12月7日進行搜索,則應檢索:

2013年5月12日2:52:37 PM-SDASAFAS_20131203182101.D 2013年6月12日3:17:11 PM-RRETWEWA_20131203184602.D00 2013年7月12日3:35:32 PM-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);
}

我不知道要進行循環。

我建議您使用DateTime.TryParse (在doc 此處 )而不是僅僅進行轉換。 這將允許您提供有效的格式設置,處理失敗(如果失敗,則將引發轉換)。

關於使用Date屬性的部分似乎還不錯,比較運算符將按預期工作。

在這里嘗試處理DateTime數據類型,而不是將所有內容都轉換為字符串。 從文件中讀取行后,解析出日期。 假設它始終將是文件中的第一個元素,並緊跟一個空格,則可以使用DateTime lineDate = DateTime.Parse(line.Split(" ")[0]);

一旦具有該格式的文件中的日期,並且從日期選擇器中獲取了DateTime fromDateDateTime toDate ,就可以編寫if(lineDate >= fromDate && lineDate <= toDate) sb.AppendLine(line);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM