2011-10-09 66 views

回答

1

我想你只需要你的使用(DayOfWeek Enumeration)改變文化。

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

這是沒有意義的,因爲你修改線程文化DAYOFWEEK枚舉不會改變。索引將保持不變,星期日= 0,星期一= 1等等。 – Marcus

4

使用以下代碼更改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

你需要'使用System.Globalization' –

+0

你知道這個改變的生活嗎?它會在下次調用服務器時恢復到之前的設置嗎?謝謝 – Ian

+0

這也是不正確的。如下所述,無論您對當前線程文化做什麼,DayOfWeek枚舉值都是常量,並且將返回星期日= 0 ... – Marcus

5

不能影響的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, 
} 
+1

這是很好的謝謝。所以,如果你想讓星期一作爲星期幾的第一天,那麼它是((int)DateTime.Now.DayOfWeek + 6)%7 + 1 .... for 1-7 ...或者在0-6編號時丟棄+1 – Ian

0

我已經創建了這個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; 
    } 
}