C #: установить начальный DayOfWeek как понедельник, а не воскресенье

Есть ли способ установить первый DayOfWeek как понедельник = 0, а не воскресенье?

(int)dateList[0].DayOfWeek == 0) // 0 = Sunday

person msfanboy    schedule 28.06.2010    source источник
comment
-1 за публикацию неполной строки кода - jk   -  person Nate Zaugg    schedule 28.06.2010
comment
Это зависит. Что ты делаешь с ценностями?   -  person SLaks    schedule 28.06.2010


Ответы (3)


Вам нужно будет создать настраиваемую культуру и указать в качестве начального DayOfWeek значение Monday. Экземпляр вашей пользовательской культуры необходимо установить для любого контекста, который обычно используется для доступа к информации о культуре (например, Thread.CurrentCulture). Следующая статья должна помочь вам начать создание собственной культуры:

Как: создавать собственные культуры

РЕДАКТИРОВАТЬ:

Я только что перечитал ваш вопрос и кое-что заметил. Вы не можете изменить свойство DayOfWeek ... это просто значение перечисления. Вам нужно будет сравнить DayOfWeek со свойством FirstDayOfWeek свойства CultureInfo.DateTimeFormat:

dateList[0].DayOfWeek == Thread.CurrentCulture.DateTimeFormat.FirstDayOfWeek

По умолчанию FirstDayOfWeek равно Sunday. Если вы создали собственную культуру, это может быть любой день недели по вашему выбору (например, Monday).

person jrista    schedule 28.06.2010
comment
+1: Это правильный подход к этому. DayOfWeek - это не число, и рассматривать его как целое число в лучшем случае проблематично. - person Reed Copsey; 29.06.2010
comment
@ Рид: Согласен. Сначала я был несколько сбит с толку OP ... сделал пару чтений, чтобы понять, в чем заключалась цель. - person jrista; 29.06.2010
comment
Зависит ли первый день недели от культуры? На самом деле первый день очень субъективен. Первый день может зависеть от вашей работы ... работа в больнице, это может быть воскресенье. Если вы работаете в офисе или учителем, скорее всего, понедельник ;-) ‹/p› - person msfanboy; 29.06.2010
comment
Я закомментирую ваш код в своем коде, возможно, он мне понадобится позже, когда моему пользователю понадобится firstdayOfWeek, а не понедельник :) - person msfanboy; 29.06.2010
comment
@msfanboy: Есть общепринятые в культурном отношении дни первого дня недели. В Америке первый день недели с точки зрения общей культуры - воскресенье, а конец недели - суббота. С точки зрения рабочей недели первый день недели в большинстве случаев - понедельник. Существует множество существующих культур, определенных для .NET, однако, если вам нужно настроить детали культуры ... например, предоставить культуру рабочей недели, где первый DOW - понедельник, у вас есть такая возможность. С технической точки зрения, вы могли бы создать культуру, которая конкретно определяет ваш личный образ жизни. ;) - person jrista; 29.06.2010
comment
Ссылка, похоже, больше не работает, ее можно найти по адресу: msdn.microsoft.com/en-us/library/ms172469 (v = vs.100) .aspx - person GrandMasterFlush; 19.10.2012
comment
@GrandMasterFlush: Спасибо. Исправлена ​​неработающая ссылка. - person jrista; 19.10.2012

DayOfWeek - это enum, поэтому вы не можете его изменить. Раньше я просто корректировал сохраняемое мной значение для компенсации, и вам, возможно, придется сделать что-то подобное. Мне нужно было 0 = Не установлено.

person Nate Zaugg    schedule 28.06.2010

Чтобы завершить это для людей, которые ищут эту проблему, вот мой простой обходной путь (VB.NET):

Private Function GetTrueDayOfWeek(DayOfWeekUS As Int16)
    Dim RetVal As Int16 = 0
    If DayOfWeekUS = 0 Then
        RetVal = 7
    Else
        RetVal = DayOfWeekUS
    End If
    Return RetVal
End Function

Использование:

Dim TrueDayInWeek as int16
TrueDayInWeek = GetTrueDayOfWeek(dateList(0).DayOfWeek)
person Oak_3260548    schedule 01.08.2017