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