DateTime Объект, представляющий день недели - PullRequest
1 голос
/ 20 апреля 2009

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

Ответы [ 4 ]

3 голосов
/ 20 апреля 2009

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

DayOfWeek day = (DayOfWeek)myInt;

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

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

1 голос
/ 20 апреля 2009

Экземпляр 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 (ноль - воскресенье) вместо использования целого числа.

1 голос
/ 20 апреля 2009

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 для нужной культуры.

1 голос
/ 20 апреля 2009

Чтобы получить DateTime, вам потребуется определенный диапазон дат, на который вы хотите, чтобы день недели попал под (поскольку DateTime - это конкретная дата и время, а день недели - нет).

Существует перечисление 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 для следующего экземпляра дня недели, который вы описываете.

...