2012-02-10 28 views
11

Tôi có một vấn đề kỳ lạ mà tôi không thể giải quyết được. Khi tôi gọi TimeZoneInfo.GetSystemTimeZones trên máy Win 7 x64 của mình, tôi nhận được 101 kết quả. Khi tôi gọi TimeZoneInfo.FindSystemTimeZoneById trên mỗi cái và chuyển thuộc tính StandardName của đối tượng TimeZoneInfo, 3 trong số chúng ném TimeZoneNotFoundException.Tại sao một số múi giờ được trả về bởi GetSystemTimeZones không tìm thấy bởi FindSystemTimeZoneById?

Dưới đây là một ví dụ:

var tzs = TimeZoneInfo.GetSystemTimeZones(); 

foreach (var timeZoneInfo in tzs.OrderBy(t => t.BaseUtcOffset)) 
{ 
    try 
    { 
    TimeZoneInfo.FindSystemTimeZoneById(timeZoneInfo.StandardName); 
    } 
    catch (TimeZoneNotFoundException) 
    { 
    Console.WriteLine(timeZoneInfo.DisplayName + "|" + timeZoneInfo.StandardName + "|" + timeZoneInfo.BaseUtcOffset); 
    } 
} 

Console.ReadLine(); 

này có khó khăn khi tìm "Coordinated Time Universal", "Giờ chuẩn Jerusalem" và "bán đảo Malay Giờ chuẩn". Lấy một trường hợp như Malaysia, tôi có thể thấy một mục cho nó khi tôi nhìn vào các múi giờ có sẵn trong môi trường khu vực của tôi, mặc dù nó hiển thị các thuộc tính DisplayName chứ không phải là StandardName:

Time zones

Tuy nhiên, tôi có thể Không nhìn thấy nó dưới một trong hai tên khi duyệt registry tại HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones

Điều gì đang xảy ra ở đây? Tại sao múi giờ Malaysia không được tải theo tên?

Vui lòng không triển khai múi giờ thay thế bằng các thư viện khác - Tôi chỉ muốn đến cuối vấn đề này bây giờ. Cảm ơn!

Trả lời

15

TimeZoneInfo.FindSystemTimeZoneById phương pháp chấp nhận id múi giờ làm thông số. Bạn đang sử dụng timeZoneInfo.StandardName để thay thế.

Dường như, đối với các giá trị 3 khu vực này cho các thuộc tính TimeZoneInfo.StandardNameTimeZoneInfo.Id khác nhau. Sử dụng điều này:

TimeZoneInfo.FindSystemTimeZoneById(timeZoneInfo.Id); 

sẽ giải quyết vấn đề.

+1

Như kỳ lạ khi mã của tôi trông hồi tưởng (nghĩa là thiếu rõ ràng), nó cũng kỳ quặc rằng chỉ có 3 trong số 101 TZ có ID khác với tên chuẩn! Hóa ra Malaysia là "Giờ chuẩn Singapore". Có bạn đi! –

+0

@alex Chúng tôi có TimeZoneInfo.ID làm tài sản hợp lệ không? –

Các vấn đề liên quan