DateTime Объект, представляющий день недели

Как я могу преобразовать число от 1 до 7 в объект DateTime в C#, который представляет день недели? Числа взяты из файла XML, который я анализирую. Я извлекаю каждый экземпляр поля, содержащего число от 1 до 7, которое представляет день недели между воскресеньем и субботой.

4 ответа

Решение

Я предполагаю, что приведение к объекту DayOfWeek даст вам день недели

DayOfWeek day = (DayOfWeek)myInt;

Что касается объекта DateTime, он представляет собой определенный день, а не обязательно случайный день недели. Вы можете попытаться добавить количество дней к определенной дате, если это то, чего вы пытаетесь достичь.

http://msdn.microsoft.com/en-us/library/system.dayofweek.aspx

DayOfWeek.Sunday равен нулю, поэтому вы можете начать с произвольной фиксированной даты, которая, как вы знаете, является воскресным, и добавить значение от 0 до 6:

public DateTime GetDayOfWeek(int dayOfWeek)
{
    if (dayOfWeek < 0 || dayOfWeek > 6) throw new ArgumentOutOfRangeException(...);

    // 4 January 2009 was a Sunday
    return new DateTime(2009,1,4).AddDays(dayOfWeek);
}

Я не уверен, почему вы хотели бы этого, хотя.

Если вы хотите получить локализованную версию дня недели, как в:

GetDayOfWeek(3).ToString("dddd"); // Gets name of day of week for current culture

альтернативой может быть использование DateTimeFormatInfo.DayNames или DateTimeFormatInfo.AbbreviatedDayNames для нужной вам культуры.

DateTime экземпляр всегда представляет собой полную дату и не может представлять только день недели. Если фактическая дата не имеет значения, возьмите любой понедельник (при условии, что 0 представляет понедельник) и просто добавьте номер дня.

Int32 dayOfWeek = 3;

// date represents a thursday since 2009/04/20 is a monday
DateTime date = new DateTime(2009, 04, 20).AddDays(dayOfWeek);

В остальном я согласен с ответом Адама Робинсона - если вы просто хотите провести день недели, придерживайтесь перечисления DayOfWeek (ноль - воскресенье) вместо использования целого числа.

Для того, чтобы получить DateTime, вам нужен определенный диапазон дат, на который вы хотите, чтобы день недели попал под DateTime это конкретная дата и время, а не будний день).

E сть DayOfWeek перечисление (чьи значения на самом деле колеблются от 0 до 6). Если все, что вам нужно, это что-то для обозначения дня недели, то вы должны быть в состоянии привести свой int к DayOfWeek лайк..

DayOfWeek myDay = (DayOfWeek)yourInt;

Если вам нужен фактический DateTimeВам понадобится дата начала. Вы могли бы тогда сделать...

DateTime myDate = startDate.AddDays(
    (int)startDate.DayOfWeek >= yourInt ? 
        (int)startDate.DayOfWeek - yourInt : 
        (int)startDate.DayOfWeek - yourInt + 7);

Это даст вам DateTime для следующего экземпляра дня недели, который вы описываете.

Другие вопросы по тегам