2011-10-09 20 views

Respuesta

1

supongo que sólo tiene que cambiar la cultura de su uso (DayOfWeek Enumeration).

Thread.CurrentThread.CurrentCulture = New CultureInfo("ar-EG") 
+0

Esto no tiene sentido, la enumeración DayOfWeek no cambiará debido a que modifique la cultura hilo. Los índices permanecerán, Sunday = 0, Monday = 1 y así sucesivamente. – Marcus

4

Utilice el siguiente código para cambiar el primer día de la semana en una aplicación 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; 
+0

Necesita 'Usar System.Globalization' –

+0

¿Conoce la vida de este cambio? ¿Volvería a la configuración anterior en la siguiente llamada al servidor? Gracias – Ian

+0

Esto también es incorrecto. Como se indica a continuación, haga lo que haga con la cultura de subprocesos actual, los valores enum de DayOfWeek son constantes y devolverán Sunday = 0 ... – Marcus

5

No se puede influir en el valor de DateTime.DayOfWeek ya que esto es un tipo de System.DayOfWeek que es una enumeración (es decir, los valores son constantes). La definición para System.DayOfWeek se encuentra en el siguiente bloque de código. Por lo tanto, si desea tratar DayOfWeek como si fuera 3 el lunes y el sábado para ser el primer día de la semana, entonces tengo que asumir que desea un sistema de numeración basado de 1 a 7. En ese caso, puede hacer ((int)DateTime.Now.DayOfWeek+1) % 7 + 1 para obtener sus números deseados. Si no necesita esto para los cálculos, sería mejor simplemente comparar el valor de DateTime.Now.DayOfWeek con sus constantes de enumeración (por ejemplo, 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

Esto es bueno gracias. Entonces, si quiere el lunes como primer día de la semana, es ((int) DateTime.Now.DayOfWeek + 6)% 7 + 1 .... para 1-7 ... o soltar el +1 para la numeración 0-6 – Ian

0

He creado este método de extensión C# que devuelve un índice basado en cero, en base a una primera día de la semana alternativa.

DayOfWeek por defecto a Domingo = 0, de lunes = 1, ..., sábado = 6. Queremos DayOfWeek (ej.) Para ser Lunes = 0, martes = 1, ..., Domingo = 6.

Teniendo en cuenta que el día de la semana actual es Domingo:

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; 
    } 
} 
Cuestiones relacionadas