2011年9月14日 星期三

練習題:於指定的日期區間中取出符合指定DayOfWeek的日期


這也是在網路上所看到的一個問題,

“如果我想要抓一段日期,並秀出在此日期區間每個星期二的日期
   2011/09/14~2011/10/14 每個星期二 請問要如何抓出”

所然說提問者是用VB語法,但是用C#來寫也是一樣的,主要是邏輯的部份是相同的。


其實這題並不是很難,主要在於會不會對DateTime做操作,

image

程式部分:

DateTime startDate = new DateTime(2011, 9, 14);
DateTime endDate = new DateTime(2011, 10, 14);
DateTime currentDate = new DateTime();
List<DateTime> matchDates = new List<DateTime>();
for(int i = 0; i<=(endDate.Subtract(startDate).Days); i++)
{
  currentDate = startDate.AddDays(i);
  if(currentDate.DayOfWeek == DayOfWeek.Tuesday)
  {
    matchDates.Add(currentDate);
  }
}

主要是該如何下for迴圈練面的條件,以及使用DateTime.DayOfWeek屬性去判斷。

MSDN - DateTime.DayOfWeek 屬性

 

2011-09-21 補充 另一種寫法,

這樣的寫法在效能上是比較好,因為不會一個日期一個日期的去判斷,

只要找到一個符合DayOfWeek的日期後,就該日期加上七天,然後一直循環到結束日期為止。

List<DateTime> matchDates = new List<DateTime>();
DateTime startDate = new DateTime(2011, 9, 14);
DateTime endDate = new DateTime(2011, 10, 14);
DateTime currentDate = startDate;
while(currentDate <= endDate)
{
  if(currentDate.DayOfWeek == DayOfWeek.Tuesday)
    {
    matchDates.Add(currentDate);
    currentDate = currentDate.AddDays(7);
    }
  else
  {
    currentDate = currentDate.AddDays(1);
  }
};

 

補充:VB.NET寫法

Dim startDate As New DateTime(2011, 9, 14)
Dim endDate As New DateTime(2011, 10, 14)
Dim currentDate As New DateTime()
Dim matchDates As New List(Of DateTime)()
For i As Integer = 0 To (endDate.Subtract(startDate).Days)
  currentDate = startDate.AddDays(i)
  If currentDate.DayOfWeek = DayOfWeek.Tuesday Then
    matchDates.Add(currentDate)
  End If
Next

image

VB.NET程式執行無誤~

 

以上

2 則留言:

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。