2011-08-29 60 views
1

我正在嘗試編寫一個方法,該方法將返回一個表示週一至週日的DateTimes列表。它應該採取給它的日期時間,並用它來計算周邊日期從DateTime對象計算週一至週日的星期

它計算開始日期確定,但問題開始時,它擊中最後一個循環。每次運行DateTime變量時,tmpDate應該增加1天,然後添加到列表中。然而,就目前而言,我收到一份包含7個開始日期的列表。

任何人都可以看到我要去哪裏錯了(我有我覺得我可能會看起來像一個簡單的一點:))?
此外,如果這是一個經常被問到的問題,請道歉。可以看到大量的開始日期/結束日期和星期數類型問題,但沒有具體處理這類問題。

private List<DateTime> getWeek(DateTime enteredDate) 
{ 
    /* Create List to hold the dates */ 
    List<DateTime> week = new List<DateTime>(); 
    int enteredDatePosition = (int)enteredDate.DayOfWeek; 

    /* Determine first day of the week */ 
    int difference = 0; 

    for (int i = 0; i < 7; i++) 
    { 
     difference++; 
     if (i == enteredDatePosition) 
     { 
      break; 
     } 
    } 
    // 2 subtracted from difference so first and enteredDatePostion elements will not be counted. 
    difference -= 2; 

    DateTime startDate = enteredDate.Subtract(new TimeSpan(difference, 0, 0, 0)); 
    week.Add(startDate); 

    /* Loop through length of a week, incrementing date & adding to list with each iteration */ 
    DateTime tmpDate = startDate; 

    for (int i = 1; i < 7; i++) 
    { 
     tmpDate.Add(new TimeSpan(1, 0, 0, 0)); 
     week.Add(tmpDate); 
    } 
    return week; 
} 
+0

如果你的代碼應該在不同的文化工作,你可以使用'日期時間CURRENTDAY =新的日期時間(enteredDate.Year,enteredDate.Month,enteredDate.Day); (currentDay.DayOfWeek!= DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek){currentDay = currentDay.AddDays(-1); }'找到一週的開始日期。 – Jani

回答

4

DateTime s是不可變的。
tmpDate.Add(...)返回新的日期時間,並且不修改tmpDate

你應該寫tmpDate = tmpDate.AddDays(1)tmpDate += TimeSpan.FromDays(1)

+0

乾杯,這是一種享受!我知道我會從這個感覺愚蠢的:) – dbr

1

我相信這個片段朝週日槽週六量身定做的,但你可以嘗試這樣的事:

DateTime ToDate = DateTime.Now.AddDays((6 - (int)DateTime.Now.DayOfWeek) - 7); 
DateTime FromDate = ToDate.AddDays(-6); 
+0

好的一個!我也會給這個彈出。 – dbr

1

你讓你的算法比它更復雜需要是。看看這個工作片斷:

using System; 
using System.Collections.Generic; 

public class MyClass 
{ 
    public static void Main() 
    { 
     // client code with semi-arbitrary DateTime suuplied 
     List<DateTime> week = GetWeek(DateTime.Today.AddDays(-2)); 
     foreach (DateTime dt in week) Console.WriteLine(dt); 
    } 

    public static List<DateTime> GetWeek(DateTime initDt) 
    { 
     // walk back from supplied date until we get Monday and make 
     // that the initial day 
     while (initDt.DayOfWeek != DayOfWeek.Monday) 
      initDt = initDt.AddDays(-1.0); 

     List<DateTime> week = new List<DateTime>(); 

     // now enter the initial day into the collection and increment 
     // and repeat seven total times to get the full week 
     for (int i=0; i<7; i++) 
     { 
      week.Add(initDt); 
      initDt = initDt.AddDays(1.0); 
     } 

     return week; 
    } 
} 
+0

乾杯!這也只是票。從來沒有考慮過將負數粘貼到AddDays – dbr

+0

不要忘記重構! –

+0

在重構我張貼的原始代碼?這樣做對於未來看到這個問題的人來說會不會不那麼有用?如果他們首先看不到問題是什麼?對不起,如果它是一個愚蠢的問題,這裏很新。 – dbr

相關問題