2011-10-09 124 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; 
    } 
} 
相关问题