2015-01-02 1 views
1

Я хочу получить число предыдущей недели предыдущего года в C#. Например, сегодня неделя 1 2015 и я хочу, чтобы получить последнюю неделю, как в номер недели 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

Btw. вы должны действительно тестировать свой код. –

ответ

7

Если это дает вам номер текущей недели:

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

Wouldn 't это дает вам номер предыдущей недели?

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

Это именно то, что я собирался поставить +1 Дэвида. – Neil

0

Я хочу, чтобы получить количество предыдущей недели предыдущего года

Это не ясно, что это «на предыдущей неделе предыдущего года».

сегодня неделя 1 2015 и я хочу, чтобы получить последнюю неделю, как в номер недели 52 года 2014

Чтобы получить номер последней недели в предыдущем году:

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

и возвращается неделя 1. у меня есть цикл, который используется для запуска с номером недели 1 до weekNo - 1, чтобы получить данные в прошлом году, но теперь weekNo - 1 возвращает 0, и я хочу, чтобы вернуть 52.

Таким образом, в случае, если ваш цикл от 1 к week - 1, то в случае week имеет значение 1, это правильно, что он не выполняет вообще. Вы просто не можете принять DateTime.Now и, без каких-либо ограничений, предположите, что номер недели будет соответствовать тому, с которым вы пытаетесь работать.

+0

OP рассчитывал получить номер недели с прошлой недели данной даты, а не на прошлой неделе в предыдущем году. –

+0

Обратите внимание, что OP хотел не только «52 для сегодняшней даты», но также «1 для даты следующего понедельника» ». Он всегда хочет номер предыдущей недели, но он должен обрабатывать даты с первой недели года. – Tormod

+0

@AnthonyForloney «Я хочу получить последнюю неделю, как на неделе № 52 года 2014 года». «Кажется * * * на основе сегодняшнего дня (2 января 2015 года) он хочет узнать номер последней недели в предыдущем году (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

Смежные вопросы