Thật không may hiện tại không có chức năng tiêu chuẩn để thực hiện điều đó.
Cho phép kiểm tra (sử dụng phản xạ) cách thức hoạt động của phương thức TimeZoneInfo.FindSystemTimeZoneById(). Chỉ cần một trong các giá trị từ trường s_systemTimeZones:
private static Dictionary<string, TimeZoneInfo> s_systemTimeZones
{
get
{
if (s_hiddenSystemTimeZones == null)
{
s_hiddenSystemTimeZones = new Dictionary<string, TimeZoneInfo>();
}
return s_hiddenSystemTimeZones;
}
set
{
s_hiddenSystemTimeZones = value;
}
}
Trường này lưu trữ tất cả TimeZoneInfo-s hiện có. Và khi bạn gọi FindSystemTimeZoneById (id) nó chỉ cần chọn một số giá trị từ từ điển được điền sẵn. Tôi không biết khi nào từ điển này khởi tạo và giá trị nào nó sử dụng để khởi tạo. Nhưng anh chàng từ this thread đã nói rằng TimeZoneInfo sử dụng các giá trị từ đăng ký: HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones
Cách rõ ràng nhất là tạo từ điển từ điển riêng và điền nó với các giá trị. Một cái gì đó như thế này:
Dictionary<string, TimeZoneInfo> dictionary = new Dictionary<string, TimeZoneInfo>();
TimeZoneInfo info = new TimeZoneInfo("ID", new TimeSpan(0, 1, 0, 0), "SomeCultureName", "Some Standard Time", "Some Daylight Time", null, true);
dictionary.Add("Some time", info);
Nhưng có một vấn đề khác: Nhà xây dựng TimeZoneInfo là riêng tư. Vì vậy, nếu bạn muốn sử dụng chức năng FindSystemTimeZoneById() và ConvertTimeFromUtc() thì bạn nên thực hiện nó ngay từ đầu. Tạo một số lớp đại diện cho múi giờ, tạo và điền từ điển của lớp này với thông tin về múi giờ ...
Không phải tin tốt lắm, tôi biết. Nhưng tôi hy vọng nó sẽ có ích cho bạn :)
Nguồn
2011-01-06 23:27:56
Hmm. Tôi đã không thực sự sử dụng tải xuống IANA - tôi vừa sao chép nội dung của/etc/zoneinfo từ máy Linux gần nhất trên mạng của chúng tôi. Nó chỉ ra các tập tin IANA có định dạng văn bản, và bạn phải chạy chúng thông qua một trình biên dịch múi giờ ("zic"). Nguồn "zic" cũng nằm trên cùng trang IANA; nhưng tôi đoán sẽ dễ dàng hơn khi sử dụng các tệp nhị phân nếu bạn có máy Linux để lấy chúng. –
Đây là [phiên bản trên GitHub] (https://github.com/mono/mono/tree/master/mcs/class/System.Core/System). –