2011-10-09 12 views

Odpowiedz

1

Przypuszczam, że po prostu trzeba zmienić kulturę używasz (DayOfWeek Enumeration).

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

to nie ma sensu, enum DzienTygodnia nie zmieni bo zmodyfikować kulturę gwintu. Indeksy pozostaną, niedziela = 0, poniedziałek = 1 i tak dalej. – Marcus

4

Poniższy kod służy do zmiany pierwszego dnia tygodnia w aplikacji 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

Potrzebujesz 'Using System.Globalization' –

+0

Czy znasz życie tej zmiany, czy powróciłby do poprzedniego ustawienia podczas następnego połączenia z serwerem? Dzięki – Ian

+0

To również jest nieprawidłowe. Jak podano poniżej, bez względu na to, co zrobisz z bieżącą kulturą wątków, wartości wyliczeniowe DayOfWeek są stałe i wrócą niedzielę = 0 ... – Marcus

5

Nie można wpływać na wartość DateTime.DayOfWeek jest to rodzaj, który jest System.DayOfWeek wyliczenie (to znaczy wartości stałej). Definicja dla System.DayOfWeek znajduje się w poniższym bloku kodu. Tak więc, jeśli chcesz traktować DayOfWeek tak, jakby był 3 w poniedziałek i sobotę, aby być pierwszym dniem tygodnia, to muszę założyć, że chcesz system numerowania oparty na 1 do 7. W takim przypadku możesz wykonać ((int)DateTime.Now.DayOfWeek+1) % 7 + 1, aby uzyskać żądane liczby. Jeśli nie potrzebujesz tego do obliczeń, lepiej po prostu porównać wartość stałych stałych wyliczeniowych (np. 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

To jest wielkie dzięki. Tak więc, jeśli chcesz poniedziałek jako pierwszy dzień tygodnia, to ((int) DateTime.Now.DayOfWeek + 6)% 7 + 1 .... dla 1-7 ... lub upuść +1 dla numeracji 0-6 – Ian

0

Utworzono tę metodę rozszerzenia C#, która zwraca indeks oparty na zera, w oparciu o alternatywny pierwszy dzień tygodnia.

DayOfWeek domyślnie niedzielę = 0, poniedziałek = 1, ..., sobota = 6. Chcemy (ex.) DayOfWeek być poniedziałek = 0, wtorek = 1, ..., niedziela = 6.

Biorąc pod uwagę, że obecny dzień tygodnia jest niedziela:

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; 
    } 
} 
Powiązane problemy