2013-08-13 33 views
7

Làm cách nào tôi có thể đặt Múi giờ chung cho toàn bộ ứng dụng.Cách đặt múi giờ chung cho toàn bộ ứng dụng trong winforms

Vì vậy, ngay cả khi múi giờ được thay đổi, ứng dụng sẽ hiển thị thời gian theo múi giờ chung.

Vì vậy, có thể đặt toàn bộ múi giờ ứng dụng?

+1

Hơi muộn một chút, nhưng hãy cho tôi biết câu hỏi của tôi không rõ ràng. Garath đưa ra câu trả lời hoàn hảo cho câu hỏi của tôi. – user1331032

Trả lời

2

Đáng tiếc là bạn không thể (Bạn có thể nhìn vào Jon Skeet trả lời trong chủ đề sau: Setting/Changing an .NET application's TimeZone). Vì vậy, bạn có hai lựa chọn:

  1. Everywhwer sử dụng DateTime.ToUniversalTime (MSDN description)
  2. Tạo lớp của riêng bạn mà đại diện DateTime và sử dụng nó thay vì
  3. Bạn có thể sử dụng thêm một số mẹo. Bạn có thể giả lập DateTime với ví dụ Microsoft Fakes. Xem thêm tại đây: Using shims to isolate your application from other assemblies for unit testing
+0

Bạn có thể Kế thừa Ngày giờ không? Đó là cấu trúc –

+0

@SriramSakthivel bạn nói đúng. Tôi đã cập nhật phản hồi của mình. –

+1

Làm thế nào về 'DateTime.UtcNow' tốt hơn nhiều? vì 'DateTime.Now' sử dụng nội bộ' DateTime.UtcNow' để tính thời gian cục bộ –

-1

Làm cách nào tôi có thể đặt Múi giờ chung cho toàn bộ ứng dụng?

Sử dụng đoạn mã sau:

TimeZone zone = TimeZone.CurrentTimeZone; 
DateTime universal = zone.ToUniversalTime(DateTime.Now); 
1

Tùy chọn tốt nhất của bạn là tạo một lớp localization sẽ trả về ngày giờ trong múi giờ ưa thích của bạn. Trong ứng dụng của bạn, bạn nên sử dụng lớp này và không DateTime.Now khi bạn muốn hẹn hò và thời gian hiển thị:

class Localization 
{ 

    public Localization(string timeZoneId = "UTC") 
    { 
     TimeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId); 
    } 

    public virtual TimeZoneInfo TimeZone { get; set; } 

    public DateTime Now 
    { 
     get 
     { 
      return  TimeZoneInfo.ConvertTime(DateTime.UtcNow, TimeZone) 
     } 
    } 
} 

Bạn có thể thực hiện trên lớp singleton nếu bạn muốn chỉ có một múi giờ tĩnh trong ứng dụng của bạn.

var locale = new Localization(); // default is UTC, provide yours. 
var now = locale.Now; 
Các vấn đề liên quan