2011-10-09 48 views

Trả lời

1

Tôi cho rằng bạn chỉ cần thay đổi văn hóa của bạn sử dụng (DayOfWeek Enumeration).

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

này không có ý nghĩa, enum dayOfWeek sẽ không thay đổi vì bạn sửa đổi văn hóa chủ đề. Các chỉ mục sẽ vẫn giữ nguyên, Chủ nhật = 0, Thứ Hai = 1 v.v. – Marcus

4

Sử dụng mã sau để thay đổi ngày đầu tiên trong tuần trong ứng dụng 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

Bạn cần 'Sử dụng System.Globalization' –

+0

Bạn có biết cuộc đời này thay đổi không, liệu nó có quay lại cài đặt trước đó khi cuộc gọi tiếp theo đến máy chủ không? Cảm ơn – Ian

+0

Điều này cũng không chính xác. Như đã nêu dưới đây, bất kể bạn làm gì với văn bản thread hiện tại, các giá trị enum DayOfWeek là hằng số và sẽ trả về Sunday = 0 ... – Marcus

5

Bạn không thể ảnh hưởng đến giá trị của DateTime.DayOfWeek vì đây là một loại System.DayOfWeek đó là một điều tra (ví dụ: các giá trị không đổi). Định nghĩa cho System.DayOfWeek nằm trong khối mã bên dưới. Vì vậy, nếu bạn muốn điều trị DayOfWeek như thể là 3 vào thứ Hai và thứ Bảy là ngày đầu tiên của tuần, thì tôi phải giả sử bạn muốn hệ thống đánh số dựa trên 1 đến 7. Trong trường hợp đó, bạn có thể làm ((int)DateTime.Now.DayOfWeek+1) % 7 + 1 để nhận số bạn muốn. Nếu bạn không cần điều này để tính toán, sẽ tốt hơn nếu chỉ so sánh giá trị DateTime.Now.DayOfWeek với hằng số enum của nó (ví dụ: 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

Đây là lời cảm ơn tốt. Vì vậy, nếu bạn muốn thứ hai là ngày đầu tiên của tuần đó ((int) DateTime.Now.DayOfWeek + 6)% 7 + 1 .... cho 1-7 ... hoặc thả +1 để đánh số 0-6 – Ian

0

Tôi đã tạo phương thức mở rộng C# này trả về chỉ mục dựa trên số không, dựa trên ngày trong tuần đầu tiên thay thế.

DayOfWeek mặc định đến chủ nhật = 0, từ thứ Hai = 1, ..., Thứ Bảy = 6. Chúng tôi muốn DayOfWeek (ex.) Được Thứ hai = 0, Thứ Ba = 1, ..., Chủ Nhật = 6.

cho rằng các ngày trong tuần hiện nay là chủ nhật:

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; 
    } 
} 
Các vấn đề liên quan