2015-01-02 67 views
1

我想在c#中獲得前一年前一週的數量。例如,今天是2015年1周,我想上週在週數年的52 2014年如何根據c#中的當前日期獲取前一週的數字?

目前我的代碼,

var weekNo = currentCulture.Calendar.GetWeekOfYear(
      DateTime.Now.Date, 
      currentCulture.DateTimeFormat.CalendarWeekRule, 
      currentCulture.DateTimeFormat.FirstDayOfWeek); 

,並返回星期1.我有一個循環用來從週數運行到weekNo - 1獲得去年的數據,但現在weekNo - 1返回0,我想它所以返回52

,它應該是這樣的,

int lastweekNo = lastWeek(datetime.today); //returns 52 for today's date, 1 for next Monday's date,.. 

讓我知道我該怎麼做到這一點。任何想法將不勝感激。

謝謝。

+0

順便說一句。你應該真的單元測試你的代碼。 –

回答

7

如果這讓你當前的週數:

currentCulture.Calendar.GetWeekOfYear(
    DateTime.Now.Date, 
    currentCulture.DateTimeFormat.CalendarWeekRule, 
    currentCulture.DateTimeFormat.FirstDayOfWeek); 

止跌這是否給你前一週的數字?

currentCulture.Calendar.GetWeekOfYear(
    DateTime.Now.AddDays(-7).Date, 
    currentCulture.DateTimeFormat.CalendarWeekRule, 
    currentCulture.DateTimeFormat.FirstDayOfWeek); 
+0

這正是我要把+1大衛。 – Neil

0

我想上年此前一週的人數

目前還不清楚什麼是「上一年度的前一週」。今天

是2015年1周,我想上週在週數年的52 2014

要獲得上週的前一年人數:

GetWeekOfYear(new DateTime(DateTime.Now.Year - 1, 12, 31), …) 

它返回第1周。我有一個循環,用於從第1周運行到weekNo - 1以獲取去年的數據,但現在weekNo - 1返回0,我希望它返回52。

所以,如果你的循環是從1week - 1,那麼萬一week具有價值1,這是正確的,它不執行的。你不能採取DateTime.Now,並且沒有任何進一步的限制,假定週數與你正在嘗試使用的年份一致。

+0

OP期待得到給定日期的上週的週數,而不是上一年的最後一週.. –

+0

請注意,OP不僅需要「52爲今天的日期」,而且「1爲下個星期一的日期」。他總是希望前一週的數字,但它應該處理從一年的第一週開始的日期。 – Tormod

+0

@AnthonyForloney「我想獲得2014年第52周的最後一週。」 - 它似乎*基於今天(2015年1月2日),他想知道上一年(2014年)的最後一週數字。問題的其餘部分不清楚。 –

1

要獲得前一週的週數,只得到了一天的週數七天前:

var weekNo = currentCulture.Calendar.GetWeekOfYear(
     DateTime.Now.Date.AddDays(-7), 
     currentCulture.DateTimeFormat.CalendarWeekRule, 
     currentCulture.DateTimeFormat.FirstDayOfWeek); 
0

假設您使用星期一作爲一週的第一天。

DateTime sundayOfLastWeek = DateTime.Now.Date.AddDays(-(int)DateTime.Now.Date.DayOfWeek); 

MessageBox.Show(GetIso8601WeekOfYear(sundayOfLastWeek).ToString()); 

GetIso8601WeekOfYear

public static int GetIso8601WeekOfYear(DateTime time) 
     { 

      DayOfWeek day = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(time); 
      if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday) 
      { 
       time = time.AddDays(3); 
      } 

      // Return the week of our adjusted day 
      return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); 
     } 

The above code is taken from this link

相關問題