thucnguyenblog logo

Chuyển đổi DateTime từ TimeZone này sang TimeZone khác

thucnguyenit35
24/08/2016 - 07:40:00

Đã bao giờ bạn gặp vấn đề về việc lệch múi giờ trong phần mềm hay website của bạn chưa? Thường thì các bạn phát triển phần mềm trên máy tính cá nhân nên không bao giờ gặp phải vấn đề này. Vấn đề này chỉ bắt đầu khi bạn gửi phần mềm của mình cho những người nước ngoài (khác múi giờ) sử dụng. Hoặc bạn vừa code xong 1 website và muốn đưa nó lên hosting để chạy thật, nhưng máy chủ lại nằm ở nước ngoài (khác múi giờ)

Trong .NET, giải pháp của tôi là dùng: TimeZoneInfo.ConvertTime()

Trước khi dùng TimeZoneInfo.ConvertTime(), tôi sử dụng DateTime.Now.AddHours() để cộng thêm giờ cho đúng với múi giờ hiện tại, nhưng sau này tôi phát hiện ra rằng nó không còn đúng. Trường hợp không đúng lại rơi vào với những vùng/quốc gia sử dụng múi giờ DST (Daylight Saving Time). Để tìm hiểu chi tiết về TimeZoneInfo trong .NET các bạn vào đây: https://msdn.microsoft.com/en-us/library/system.timezoneinfo(v=vs.110).aspx




Để chuyển đổi thời gian từ múi giờ này sang múi giờ khác ở bất kỳ khu vực/quốc gia nào trên thế giới, bạn tham khảo đoạn code bên dưới. Với các múi giờ khác nhau các bạn thay thế giá trị của timezoneID bằng giá trị tương ứng ở bảng bên dưới

C# Code:

DateTime ChangeTimeZone(DateTime dt, string timeZoneID) {
 TimeZoneInfo timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timezoneID);
 return TimeZoneInfo.ConvertTime(dt, timeZoneInfo);
}


Time Zone IDTime Zone Display Name
GMT Standard Time(GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London
Greenwich Standard Time(GMT) Monrovia, Reykjavik
W. Europe Standard Time(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
Central Europe Standard Time(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague
Romance Standard Time(GMT+01:00) Brussels, Copenhagen, Madrid, Paris
Central European Standard Time(GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb
W. Central Africa Standard Time(GMT+01:00) West Central Africa
Jordan Standard Time(GMT+02:00) Amman
GTB Standard Time(GMT+02:00) Athens, Bucharest, Istanbul
Middle East Standard Time(GMT+02:00) Beirut
Egypt Standard Time(GMT+02:00) Cairo
South Africa Standard Time(GMT+02:00) Harare, Pretoria
FLE Standard Time(GMT+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius
Israel Standard Time(GMT+02:00) Jerusalem
E. Europe Standard Time(GMT+02:00) Minsk
Namibia Standard Time(GMT+02:00) Windhoek
Arabic Standard Time(GMT+03:00) Baghdad
Arab Standard Time(GMT+03:00) Kuwait, Riyadh
Russian Standard Time(GMT+03:00) Moscow, St. Petersburg, Volgograd
E. Africa Standard Time(GMT+03:00) Nairobi
Georgian Standard Time(GMT+03:00) Tbilisi
Iran Standard Time(GMT+03:30) Tehran
Arabian Standard Time(GMT+04:00) Abu Dhabi, Muscat
Azerbaijan Standard Time(GMT+04:00) Baku
Mauritius Standard Time(GMT+04:00) Port Louis
Caucasus Standard Time(GMT+04:00) Yerevan
Afghanistan Standard Time(GMT+04:30) Kabul
Ekaterinburg Standard Time(GMT+05:00) Ekaterinburg
Pakistan Standard Time(GMT+05:00) Islamabad, Karachi
West Asia Standard Time(GMT+05:00) Tashkent
India Standard Time(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi
Sri Lanka Standard Time(GMT+05:30) Sri Jayawardenepura
Nepal Standard Time(GMT+05:45) Kathmandu
N. Central Asia Standard Time(GMT+06:00) Almaty, Novosibirsk
Central Asia Standard Time(GMT+06:00) Astana, Dhaka
Myanmar Standard Time(GMT+06:30) Yangon (Rangoon)
SE Asia Standard Time(GMT+07:00) Bangkok, Hanoi, Jakarta
North Asia Standard Time(GMT+07:00) Krasnoyarsk
China Standard Time(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi
North Asia East Standard Time(GMT+08:00) Irkutsk, Ulaan Bataar
Singapore Standard Time(GMT+08:00) Kuala Lumpur, Singapore
W. Australia Standard Time(GMT+08:00) Perth
Taipei Standard Time(GMT+08:00) Taipei
Tokyo Standard Time(GMT+09:00) Osaka, Sapporo, Tokyo
Korea Standard Time(GMT+09:00) Seoul
Yakutsk Standard Time(GMT+09:00) Yakutsk
Cen. Australia Standard Time(GMT+09:30) Adelaide
AUS Central Standard Time(GMT+09:30) Darwin
E. Australia Standard Time(GMT+10:00) Brisbane
AUS Eastern Standard Time(GMT+10:00) Canberra, Melbourne, Sydney
West Pacific Standard Time(GMT+10:00) Guam, Port Moresby
Tasmania Standard Time(GMT+10:00) Hobart
Vladivostok Standard Time(GMT+10:00) Vladivostok
Central Pacific Standard Time(GMT+11:00) Magadan, Solomon Is., New Caledonia
New Zealand Standard Time(GMT+12:00) Auckland, Wellington
Fiji Standard Time(GMT+12:00) Fiji, Kamchatka, Marshall Is.
Tonga Standard Time(GMT+13:00) Nuku'alofa
Azores Standard Time(GMT-01:00) Azores
Cape Verde Standard Time(GMT-01:00) Cape Verde Is.
Mid-Atlantic Standard Time(GMT-02:00) Mid-Atlantic
E. South America Standard Time(GMT-03:00) Brasilia
Argentina Standard Time(GMT-03:00) Buenos Aires
SA Eastern Standard Time(GMT-03:00) Georgetown
Greenland Standard Time(GMT-03:00) Greenland
Montevideo Standard Time(GMT-03:00) Montevideo
Newfoundland Standard Time(GMT-03:30) Newfoundland
Atlantic Standard Time(GMT-04:00) Atlantic Time (Canada)
SA Western Standard Time(GMT-04:00) La Paz
Central Brazilian Standard Time(GMT-04:00) Manaus
Pacific SA Standard Time(GMT-04:00) Santiago
Venezuela Standard Time(GMT-04:30) Caracas
SA Pacific Standard Time(GMT-05:00) Bogota, Lima, Quito, Rio Branco
Eastern Standard Time(GMT-05:00) Eastern Time (US & Canada)
US Eastern Standard Time(GMT-05:00) Indiana (East)
Central America Standard Time(GMT-06:00) Central America
Central Standard Time(GMT-06:00) Central Time (US & Canada)
Central Standard Time (Mexico)(GMT-06:00) Guadalajara, Mexico City, Monterrey
Canada Central Standard Time(GMT-06:00) Saskatchewan
US Mountain Standard Time(GMT-07:00) Arizona
Mountain Standard Time (Mexico)(GMT-07:00) Chihuahua, La Paz, Mazatlan
Mountain Standard Time(GMT-07:00) Mountain Time (US & Canada)
Pacific Standard Time(GMT-08:00) Pacific Time (US & Canada)
Pacific Standard Time (Mexico)(GMT-08:00) Tijuana, Baja California
Alaskan Standard Time(GMT-09:00) Alaska
Hawaiian Standard Time(GMT-10:00) Hawaii
Samoa Standard Time(GMT-11:00) Midway Island, Samoa
Dateline Standard Time(GMT-12:00) International Date Line West

Chú ý: TimeZoneInfo chỉ được hỗ trợ bởi .NET 3.5 trở lên


 Author infomation:
Xin chào các bạn! Tôi tên là Thức, tôi sinh ra và lớn lên tại quê hương Yên Mỹ, Yên Mô, Ninh Bình, từ thời Trung học tôi đã yêu thích tin học và công nghệ. Tôi tốt nghiệp ngành Công nghệ thông tin tại Đại học Mở Hà Nội, hiện tại tôi đang là một Web Developer. Tôi tạo ra blog này nhằm mục đích chia sẻ kinh nghiệm, kiến thức mà tôi đã trải qua trong cuộc sống, vì thế sẽ có thể thiếu sót mong các bạn đóng góp để giúp tôi hoàn thiện hơn.
 Share:

 Related Post