2011-10-09 22 views

risposta

1

Suppongo che solo bisogno di cambiare la cultura vostro usando (DayOfWeek Enumeration).

+0

Questo non ha senso, l'enumerazione DayOfWeek non cambierà, perché si modifica la cultura thread. Gli indici rimarranno, domenica = 0, lunedì = 1 e così via. – Marcus

4

Utilizzare il codice seguente per modificare il primo giorno della settimana in un'applicazione 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

È necessario 'Utilizzare System.Globalization' –

+0

Conosci la durata di questo cambiamento, ripristinerebbe l'impostazione precedente alla prossima chiamata al server? Grazie – Ian

+0

Anche questo non è corretto. Come indicato di seguito, qualunque cosa tu faccia per la cultura del thread corrente, i valori dell'enumerazione DayOfWeek sono costanti e restituiranno domenica = 0 ... – Marcus

5

Non è possibile influenzare il valore di DateTime.DayOfWeek come questo è un tipo di System.DayOfWeek che è un'enumerazione (cioè i valori sono costanti). La definizione per System.DayOfWeek si trova nel blocco di codice sottostante. Quindi, se si desidera trattare DayOfWeek come se fosse 3 il lunedì e il sabato per essere il primo giorno della settimana, quindi devo presumere che si desidera un sistema di numerazione basato su 1 a 7. In tal caso, è possibile eseguire ((int)DateTime.Now.DayOfWeek+1) % 7 + 1 per ottenere i numeri desiderati. Se non hai bisogno di questo per i calcoli, sarebbe meglio confrontare il valore di DateTime.Now.DayOfWeek con le sue costanti enum (ad esempio 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

Questo è un buon ringraziamento. Quindi, se vuoi lunedì come primo giorno della settimana è ((int) DateTime.Now.DayOfWeek + 6)% 7 + 1 .... per 1-7 ... oppure rilascia il +1 per la numerazione 0-6 – Ian

0

Ho creato questo metodo di estensione C# che restituisce un indice a base zero, basato su un primo giorno feriale alternativo.

DayOfWeek default Domenica = 0, Lunedi = 1, ..., Sabato = 6. Vogliamo (ex.) DayOfWeek essere Lunedi = 0, Martedì = 1, ..., Domenica = 6.

Dato che il giorno della settimana corrente è Domenica:

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; 
    } 
} 
Problemi correlati