Как я могу изменить, какой день является первым днем ​​недели? - PullRequest
6 голосов
/ 09 октября 2011

Мне нужно изменить первый день недели в asp.net, то есть я хочу, чтобы суббота была первым днем ​​недели.

Например, приведенный ниже код должен возвращать 3 в понедельник:

(int)DateTime.Now.DayOfWeek

Ответы [ 5 ]

7 голосов
/ 21 июля 2015

Вы не можете влиять на значение DateTime.DayOfWeek, так как это тип System.DayOfWeek, который является перечислением (то есть значения являются постоянными). Определение для System.DayOfWeek находится в блоке кода ниже. Итак, если вы хотите, чтобы DayOfWeek считался 3 в понедельник и субботу первым днем ​​недели, то я должен предположить, что вам нужна система нумерации от 1 до 7. В этом случае вы можете сделать ((int)DateTime.Now.DayOfWeek+1) % 7 + 1, чтобы получить желаемые номера. Если вам не нужно это для расчетов, лучше сравнить значение DateTime.Now.DayOfWeek с его константами перечисления (например, if( DateTime.Now.DayOfWeek == DayOfWeek.Monday ) ...).

// Summary:
//     Specifies the day of the week.
[Serializable]
[ComVisible(true)]
public enum DayOfWeek
{
    // Summary:
    //     Indicates Sunday.
    Sunday = 0,
    //
    // Summary:
    //     Indicates Monday.
    Monday = 1,
    //
    // Summary:
    //     Indicates Tuesday.
    Tuesday = 2,
    //
    // Summary:
    //     Indicates Wednesday.
    Wednesday = 3,
    //
    // Summary:
    //     Indicates Thursday.
    Thursday = 4,
    //
    // Summary:
    //     Indicates Friday.
    Friday = 5,
    //
    // Summary:
    //     Indicates Saturday.
    Saturday = 6,
}
4 голосов
/ 13 июня 2012

Используйте следующий код для изменения первого дня недели в приложении asp.net.

CultureInfo _culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
CultureInfo _uiculture = (CultureInfo)CultureInfo.CurrentUICulture.Clone();

_culture.DateTimeFormat.FirstDayOfWeek = DayOfWeek.Saturday;
_uiculture.DateTimeFormat.FirstDayOfWeek = DayOfWeek.Saturday;

System.Threading.Thread.CurrentThread.CurrentCulture = _culture;
System.Threading.Thread.CurrentThread.CurrentUICulture = _uiculture;
1 голос
/ 25 февраля 2018

Я создал этот метод расширения C #, который возвращает нулевой индекс, основанный на альтернативном первом дне недели.

DayOfWeek по умолчанию воскресенье = 0, понедельник = 1, ..., суббота =6. Мы хотим, чтобы (например) DayOfWeek было понедельником = 0, вторником = 1, ..., воскресением = 6.

Учитывая, что текущим днем ​​недели является воскресенье:

DateTime.Now.DayOfWeek; // returns Sunday
(int)DateTime.Now.DayOfWeek; // returns 0
DateTime.Now.DayOfWeek(DayOfWeek.Monday); // returns 6    

public static class ExtensionMethods
{
    /// <summary>
    /// Returns an zero-based index where firstDayOfWeek = 0 and lastDayOfWeek = 6
    /// </summary>
    /// <param name="value"></param>
    /// <param name="firstDayOfWeek"></param>
    /// <returns>int between 0 and 6</returns>
    public static int DayOfWeek(this DateTime value, DayOfWeek firstDayOfWeek)
    {
        var idx = 7 + (int)value.DayOfWeek - (int)firstDayOfWeek;
        if (idx > 6) // week ends at 6, because Enum.DayOfWeek is zero-based
        {
            idx -= 7;
        }
        return idx;
    }
}
1 голос
/ 09 октября 2011

Полагаю, вам просто нужно изменить культуру использования ( Перечисление DayOfWeek ).

Thread.CurrentThread.CurrentCulture = New CultureInfo("ar-EG")
0 голосов
/ 10 октября 2018
protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
        {
            if (e.Day.Date.DayOfWeek == DayOfWeek.Friday)
            {
                e.Day.IsSelectable = false;
                e.Cell.BackColor = Color.AliceBlue;
            }
        }

Это действительно работает. Здесь DayRender - событие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...