我知道所有的日期都是「本月的第一個星期一」,因此我有一個月的日期列表。在某些情況下,我需要編寫一個函數來確定是否所有日期都是連續的在C#中,找到DateTime數組中的空白的最佳方法是什麼?
因此,例如,如果這是日期列表,則函數將返回true,因爲所有項目都是「第一個星期五月「,並沒有差距。下面的這個例子將返回true。
var date = new DateTime(2013, 1, 4);
var date1 = new DateTime(2013, 2, 1);
var date2 = new DateTime(2013, 3, 1);
var date3 = new DateTime(2013, 4, 5);
var dateArray = new DateTime[]{date, date1, date2, date3};
bool isConsecutive = IsThisListConsecutive(dateArray);
那裏,因爲即使他們也都「每月的第一個星期五」下面這個例子將返回false,它錯過了2013年3月項目。
var date = new DateTime(2013, 1, 4);
var date1 = new DateTime(2013, 2, 1);
var date3 = new DateTime(2013, 4, 5);
var dateArray = new DateTime[]{date, date1, date3};
bool isConsecutive = IsThisListConsecutive(dateArray);
,所以我試圖找出正確的邏輯爲IsThisListConsecutive()方法:
這是我第一次嘗試:(注意我已經知道了前期所有的日期是一週相同的同一天一個月的一週,所以我要尋找的唯一事情是缺少插槽)
private bool IsThisListConsecutive(IEnumerable<DateTime> orderedSlots)
{
DateTime firstDate = orderedSlots.First();
int count = 0;
foreach (var slot in orderedSlots)
{
if (slot.Month != firstDate.AddMonths(count).Month)
{
return false;
}
count++;
}
return true;
}
該代碼上述工程exept如果列表從一年跨越到另一個。我想獲得任何建議,以創建這個函數的更好方式,以及如何重寫這條線以處理跨越多年的日期。
代碼中的'orderedSlots'來自哪裏?另外,我認爲你以奇怪的方式使用「連續」這個詞。 – poke 2013-03-11 01:30:59
@poke - 我在orderedSlots的代碼中修正了這個類型。你能想到一個更好的詞用來比較「連續」來看看我在看什麼 – leora 2013-03-11 01:34:10
順便說一句。 「date」和「date1」是星期三,但是「date2」和「date3」是星期四? – poke 2013-03-11 01:34:25