2013-04-11 29 views
0

我想知道我怎麼能在這相同的格式Thursday 03:00 PM格式化DateTime.Now,這樣我可以把它比作我的自定義格式的日期時間值,如何將自定義格式設置爲DateTime.Now?

我試圖創建一個簡單的調度系統,如果一個特定日期時間將相當於當前日期時間的代碼將在它之下運行,但我停留在我的自定義日期比較當前日期時間

string[] schedule = { "Thursday 2:47 PM", "Thursday 2:50 PM", "Thursday 2:55 PM" }; 
     private void timer1_Tick(object sender, EventArgs e) 
     { 
      DateTime dateValue; 
      foreach (var i in schedule) 
      { 
       if (DateTime.TryParse(i, out dateValue)) 
       { 
        if (dateValue == DateTime.Now) 
        { 
         //do something here 
        } 
       } 
      } 
     } 

     private void Form1_Shown(object sender, EventArgs e) 
     { 
      timer1.Start(); 
     } 
+1

你得到了什麼錯誤?即使你的日程表數組不包含任何日期,它只有時間。 – Sachin 2013-04-11 07:06:15

+0

那麼你必須特別比較像星期幾和時間這樣的相關部分,因爲沒有你需要解析的字符串中的日期信息 – V4Vendetta 2013-04-11 07:06:59

+0

那麼DateTime.Now也包含秒,所以比較固定日期和不斷變化日期如DateTime.Now實際上是不可能的 – Steve 2013-04-11 07:12:09

回答

3

嘗試dateValue.ToString("dddd hh:mm tt", CultureInfo.CreateSpecificCulture("en-US"))

  • DDDD - 一週的某天的全名。
  • HH - 時針,使用來自01一個12小時時鐘至12
  • 毫米 - 通過59
  • TT的那一刻,從00 - 的AM/PM指示器。

有關更多信息,請參閱MSDN

+0

推薦'CreateSpecificCulture'而不是'new CultureInfo'或'GetCultureInfo'的原因是什麼? – cremor 2013-04-11 07:32:04

+0

如果'CreateSpecificCulture'將無法爲「en-X」創建類型爲「CultureInfo」的實例,它將再次嘗試爲「en」文化創建實例。 – 2013-04-11 17:26:15

1

您試圖將Time的值與DateTime的值進行比較。我想你只是想比較你的array的時間值到current的時間值,在這種情況下,你可以比較時間的一部分日期。

if (DateTime.TryParse(i, out dateValue)) 
{ 
    if (dateValue.ToShortTimeString() == DateTime.Now.ToShortTimeString()) 
    { 
    //do something here 
    } 
} 
2

應該以這種方式工作。

if (DateTime.TryParse(i, out dateValue)) 
{ 
    if (dateValue.ToShortTimeString() == DateTime.ToString("dd hh:mm tt")) 
    { 
    //do something here 
    } 
} 

DD告訴,顯示當前的一天。 hh顯示小時數和毫米的分鐘數。我離開ss幾秒鐘,因爲它似乎你不需要它。通過ttPMAM將得到顯示。

1

首先,您需要將時間表字符串數組中的時間轉換爲DateTime。

鏈接有關日期時間風格:http://www.csharp-examples.net/string-format-datetime/

之後,你需要比較兩個日期的唯一一次一部分。採取從這裏的答案:How to compare time part of datetime

所以,最後你的代碼將是這樣的:

string[] schedule = { "Thursday 2:47 PM", "Thursday 2:50 PM", "Thursday 2:55 PM" }; 
private void timer1_Tick(object sender, EventArgs e) 
{ 
    DateTime dateValue; 
    foreach (var i in schedule) 
    { 
     if (DateTime.TryParseExact(i, "dddd h:mm tt", CultureInfo.CreateSpecificCulture("en-US"), DateTimeStyles.None, out dateValue)) 
     { 
      var currentDate = DateTime.Now; 
      if (dateValue.DayOfWeek == currentDate.DayOfWeek && dateValue.TimeOfDay == currentDate.TimeOfDay) 
      { 
       //do something here 
      } 
     } 
    } 
} 

private void Form1_Shown(object sender, EventArgs e) 
{ 
    timer1.Start(); 
} 

當然,你也可以DateTime.Now轉換爲有效格式的字符串(如您的字符串數組)但我認爲這是錯誤的。如果您想檢查日期早於或晚於當前日期,則必須重新編寫代碼。

相關問題