Вземете диапазон от дати по номер на седмица c#

Възможен дубликат:
В .net, като знам номера на седмицата, как мога да получа датата на делничните дни?

Здравейте,

Имам въпрос към вас. Как да получа диапазона от дати за даден номер на седмица.

Например: Ако въведа седмица 12, резултатът трябва да бъде:

21-03-2011
22-03-2011
23-03-2011
24-03-2011
25-03-2011
26-03-2011
27-03-2011

Наистина се надявам, че можете да ми помогнете, просто не мога да намеря awnser никъде!

Благодаря предварително.


person Wesley    schedule 21.03.2011    source източник
comment
Силен дубликат на stackoverflow.com/questions/3854429/   -  person Saurabh Gokhale    schedule 21.03.2011


Отговори (3)


Забележка

Изглежда, че съм пропуснал грешка. Текущият код е актуализиран от 2012-01-30, за да отчете този факт и сега извличаме daysOffset въз основа на вторник, което според Микаел Свенсън изглежда решава проблема.

Тези изчисления на седмични дати по ISO8601 са малко странни, но ето как го правите:

DateTime jan1 = new DateTime(yyyy, 1, 1); 

int daysOffset = DayOfWeek.Tuesday - jan1.DayOfWeek; 

DateTime firstMonday = jan1.AddDays(daysOffset); 

var cal = CultureInfo.CurrentCulture.Calendar; 

int firstWeek = cal.GetWeekOfYear(jan1, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

var weekNum = ww;

if (firstWeek <= 1) 
{ 
    weekNum -= 1; 
}

var result = firstMonday.AddDays(weekNum * 7 + d - 1);

return result;

Основно изчислете референтна точка, след това добавете дни, трудните неща са свързани с факта, че седмица 53 понякога може да настъпи през януари, а седмица 1 понякога може да настъпи през декември. Трябва да се приспособите към това и това е един от начините да го направите.

Горният код изчислява датата извън година (гггг) и номер на седмица (ww) и ден от седмицата (d).

person John Leidegren    schedule 21.03.2011
comment
Ако въведа yyyy=2012, ww=1 и d=понеделник(1), вашият код връща 9 януари, а не 2 януари, което би било правилно. - person Mikael Svenson; 30.01.2012
comment
Вижте отговора ми тук: stackoverflow.com/a/9064954/153390 - person Mikael Svenson; 30.01.2012
comment
Това е за съжаление, помня, че преработих този код и създадох много тестове, но това е по-старо и очевидно не е правилно, вашата малка промяна обаче изглежда работи и нямам възможност да тествам това по-задълбочено, така че ще повярвай, че си го направил сам и коригирай собствения ми отговор ;) - person John Leidegren; 30.01.2012
comment
Тествах го за всеки ден от 1900-1-1 до 3000-12-31 :) - person Mikael Svenson; 31.01.2012

  • Разберете кой ден от седмицата е първият януари на годината (напр. през 2011 г. беше събота)
  • Добавете необходимия брой дни, за да стане следващия понеделник (2 дни)
  • От този ден нататък добавете (Брой седмици - 1) * 7 дни, за да получите първия ден от седмицата, който ви интересува - Покажете този ден плюс следващите дни, за да получите цялата седмица
person Tomas Walek    schedule 21.03.2011

Нещо подобно би трябвало да свърши работа

        DateTime d = new DateTime(someYear, 1, 1);
        d.AddDays(numWeeks * 7);
        for (int x = 0; x < 7; x++)
        {
            Console.WriteLine(d.ToShortDateString());
            d.AddDays(1);
        }
person Erix    schedule 21.03.2011
comment

Наскоро създадох примерно уеб приложение, базирано на Spring, което много чисто активира JMX за най-новите версии на Spring, Hibernate и Ehcache.

Има примери както за достъп, базиран на EntityManager, така и за достъп до DAO (включително транзакции!). Той също така показва как да направите инжектиране, базирано на анотация, за да отхвърлите необходимостта да използвате xml конфигурацията на Spring за beans. Има дори базиран на SpringMVC примерен сървлет, използващ анотации. По принцип това е базирана на Spring версия на доста мощен сървър за приложения, работещ върху всяка сървлет машина.

Все още не е документиран, но скоро ще стигна до него. Разгледайте конфигурационните файлове и изходния код и трябва да е доста ясно.

Мотивацията зад това е, че се уморих от всички луди публикации в блогове с 50 различни начина да настроя нещата и най-накрая направих един прост източник, от който хората могат да работят. Той е в github, така че не се колебайте да разклоните проекта и да правите каквото искате с него.

https://github.com/lookfirst/fallback

- person Martin Milan; 21.03.2011
comment
Да, това е твърде опростено и понякога изчислява грешна дата. - person John Leidegren; 21.03.2011