#c# #asp.net #.net #datetime
#c# #asp.net #.net #дата и время
Вопрос:
Мне нужно изменить первый день недели в asp.net , то есть я хочу, чтобы суббота была первым днем недели.
Например, приведенный ниже код должен возвращать 3 в понедельник:
(int)DateTime.Now.DayOfWeek
Ответ №1:
Вы не можете повлиять на значение DateTime.DayOfWeek
, поскольку это тип System.DayOfWeek
, который является перечислением (т. Е. Значения являются постоянными). Определение для System.DayOfWeek
находится в блоке кода ниже. Итак, если вы хотите рассматривать DayOfWeek
3
понедельник и субботу как первый день недели, то я должен предположить, что вы хотите использовать систему нумерации от 1 до 7. В этом случае вы можете сделать ((int)DateTime.Now.DayOfWeek 1) % 7 1
, чтобы получить желаемые числа. Если вам это не нужно для вычислений, было бы лучше просто сравнить значение DateTime.Now.DayOfWeek
с его константами enum (например 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,
}
Комментарии:
1. Это хорошо, спасибо. Итак, если вы хотите, чтобы понедельник был первым днем недели, это ((int)DateTime.Now.DayOfWeek 6) % 7 1 …. для 1-7 … или отбросьте 1 для нумерации 0-6
Ответ №2:
Используйте следующий код, чтобы изменить первый день недели в 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. Вам нужно
Using System.Globalization
2. Знаете ли вы, какова жизнь этого изменения, вернется ли оно к предыдущим настройкам при следующем обращении к серверу? Спасибо
3. Это также неверно. Как указано ниже, что бы вы ни делали с текущей культурой потока, значения перечисления DayOfWeek постоянны и вернут Sunday= 0…
Ответ №3:
Я полагаю, вам просто нужно изменить используемую вами культуру (перечисление DayOfWeek).
Thread.CurrentThread.CurrentCulture = New CultureInfo("ar-EG")
Комментарии:
1. Это не имеет смысла, перечисление DayOfWeek не изменится, потому что вы измените культуру потока. Индексы останутся, воскресенье = 0, понедельник = 1 и так далее.
Ответ №4:
Я создал этот метод расширения 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. Это идеальный ответ
2. DayOfWeek, возможно, не лучшее название для такого метода, поскольку оно противоречит перечислению DayOfWeek .
Ответ №5:
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 — это событие.