La gestion des dates et surtout des horaires dans un site multinational est très importante. Il faudrait se baser sur API systèmes pour ne pas recoder toutes les règles et “réinventer la roue”. Le Framework .NET fourni une classe système permettant de gérer les informations des zones horaires :
// Type: System.TimeZoneInfo // Assembly: mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 // MVID: 255ABCDF-D9D6-4E3D-BAD4-F74D4CE3D7A8 // Assembly location: C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll namespace System { public sealed class TimeZoneInfo : IEquatable<TimeZoneInfo>, ISerializable, IDeserializationCallback { //... } }
Donc il ne faut pas hésiter à l’utiliser. Voici quelques utilisations :
var dt = DateTime.Now; // Display local datetime Console.Out.WriteLine(dt); // Display correspondant datetime in (UTC-05:00) Est (USA. and Canada) Console.Out.WriteLine(TimeZoneInfo.ConvertTime(dt, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"))); // Display correspondant datetime in (UTC+01:00) Bruxelles, Copenhague, Madrid, Paris Console.Out.WriteLine(TimeZoneInfo.ConvertTime(dt, TimeZoneInfo.FindSystemTimeZoneById("Romance Standard Time")));
==>
20/03/2015 15:26:10 20/03/2015 10:26:10 20/03/2015 15:26:10
Il faudrait aussi si vous persistez des dates dans une base de données qu’elle soit au format UTC. Pour convertir ces dates UTC au format attendu voici quelques exemples. J’ai pris exprès l’exemple de quelques dates de mars pour montrer la prise en charge automatique du passage à l’heure d’été décalé entre les USA et la France.
Console.Out.WriteLine("--------- DaylightSavingTime ON in USA and OFF in France"); var dt = new DateTime(2005,03,25,15,00,00); Console.Out.WriteLine(dt); Console.Out.WriteLine(TimeZoneInfo.ConvertTimeFromUtc(dt, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"))); Console.Out.WriteLine(TimeZoneInfo.ConvertTimeFromUtc(dt, TimeZoneInfo.FindSystemTimeZoneById("Romance Standard Time"))); Console.Out.WriteLine("--------- DaylightSavingTime ON in USA and ON France"); dt = new DateTime(2005,03,29,15,00,00); Console.Out.WriteLine(dt); Console.Out.WriteLine(TimeZoneInfo.ConvertTimeFromUtc(dt, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"))); Console.Out.WriteLine(TimeZoneInfo.ConvertTimeFromUtc(dt, TimeZoneInfo.FindSystemTimeZoneById("Romance Standard Time")));
==>
--------- DaylightSavingTime ON in USA and OFF in France 25/03/2005 15:00:00 25/03/2005 10:00:00 25/03/2005 16:00:00 --------- DaylightSavingTime ON in USA and ON France 29/03/2005 15:00:00 29/03/2005 10:00:00 29/03/2005 17:00:00
Pour avoir la liste complète des TimeZone gérés
var lst = TimeZoneInfo.GetSystemTimeZones();
SystemTimeZones
Id | Display Name | Standard Name | Daylight Name | Base UtcOffset | Supports Daylight SavingTime |
---|---|---|---|---|---|
Dateline Standard Time | (UTC-12:00) Ligne de date internationale (Ouest) | Changement de date | Changemt de date (heure d’été) | -12:00:00 | False |
UTC-11 | (UTC-11:00) Temps universel coordonné-11 | UTC-11 | UTC-11 | -11:00:00 | False |
Hawaiian Standard Time | (UTC-10:00) Hawaii | Hawaii | Hawaii (heure d’été) | -10:00:00 | False |
Alaskan Standard Time | (UTC-09:00) Alaska | Alaska | Alaska (heure d’été) | -09:00:00 | True |
Pacific Standard Time (Mexico) | (UTC-08:00) Basse Californie | Pacifique (Mexique) | Pacifique (h. d’été, Mexique) | -08:00:00 | True |
Pacific Standard Time | (UTC-08:00) Pacifique (É.-U. et Canada) | Pacifique | Pacifique (heure d’été) | -08:00:00 | True |
US Mountain Standard Time | (UTC-07:00) Arizona | Rocheuses - É.-U. | Rocheuses - É.-U. (heure d’été) | -07:00:00 | False |
Mountain Standard Time (Mexico) | (UTC-07:00) Chihuahua, La Paz, Mazatlan | Montagnes (Mexique) | Montagne (heure d’été, Mexique) | -07:00:00 | True |
Mountain Standard Time | (UTC-07:00) Montagnes Rocheuses (É.-U. et Canada) | Rocheuses | Rocheuses (heure d’été) | -07:00:00 | True |
Central America Standard Time | (UTC-06:00) Amérique centrale | Amérique centrale | Amérique centrale (heure d’été) | -06:00:00 | False |
Central Standard Time | (UTC-06:00) Centre (É.-U. et Canada) | Centre | Centre (heure d’été) | -06:00:00 | True |
Central Standard Time (Mexico) | (UTC-06:00) Guadalajara, Mexico, Monterrey | Centre (Mexique) | Centre (heure d’été, Mexique) | -06:00:00 | True |
Canada Central Standard Time | (UTC-06:00) Saskatchewan | Canada Centre | Canada Centre (heure d’été) | -06:00:00 | False |
SA Pacific Standard Time | (UTC-05:00) Bogota, Lima, Quito, Rio Branco | Amér. du Sud - Pac. | Amér. du Sud, Pac.(heure d’été) | -05:00:00 | False |
Eastern Standard Time | (UTC-05:00) Est (É.-U. et Canada) | Est | Est (heure d’été) | -05:00:00 | True |
US Eastern Standard Time | (UTC-05:00) Indiana (Est) | Est (É.-U.) | Est (É.-U. - heure d’été) | -05:00:00 | True |
Venezuela Standard Time | (UTC-04:30) Caracas | Venezuela | Venezuela (heure d’été) | -04:30:00 | False |
Paraguay Standard Time | (UTC-04:00) Asunción | Paraguay | Paraguay (heure d’été) | -04:00:00 | True |
Central Brazilian Standard Time | (UTC-04:00) Cuiaba | Brésil Centre | Brésil Centre (heure d’été) | -04:00:00 | True |
SA Western Standard Time | (UTC-04:00) Georgetown, La Paz, Manaus, San Juan | Amér. du Sud occid. | Amér. du Sud occid. (heure été) | -04:00:00 | False |
Atlantic Standard Time | (UTC-04:00) Heure Atlantique (Canada) | Atlantique | Atlantique (heure d’été) | -04:00:00 | True |
Pacific SA Standard Time | (UTC-04:00) Santiago | Amér. du Sud Pacif | Amér. du Sud Pacif(heure d’été) | -04:00:00 | True |
Newfoundland Standard Time | (UTC-03:30) Terre-Neuve-et-Labrador | Terre-Neuve-et-Labrador | Terre-Neuve (heure d’été) | -03:30:00 | True |
E. South America Standard Time | (UTC-03:00) Brasilia | Amér. du Sud - Est | Amér. du Sud, Est (heure d’été) | -03:00:00 | True |
Argentina Standard Time | (UTC-03:00) Buenos Aires | Argentine | Argentine (heure d’été) | -03:00:00 | True |
SA Eastern Standard Time | (UTC-03:00) Cayenne, Fortaleza | Amér. du Sud orien. | Amér. du Sud orien(heure d’été) | -03:00:00 | False |
Greenland Standard Time | (UTC-03:00) Groenland | Groenland | Groenland (heure d’été) | -03:00:00 | True |
Montevideo Standard Time | (UTC-03:00) Montevideo | Montevideo | Montevideo (heure d’été) | -03:00:00 | True |
Bahia Standard Time | (UTC-03:00) Salvador | Bahia | Bahia (heure d'été) | -03:00:00 | True |
Mid-Atlantic Standard Time | (UTC-02:00) Centre-Atlantique - Ancien | Centre-Atlantique | Centre-Atlantique (heure d’été) | -02:00:00 | True |
UTC-02 | (UTC-02:00) Temps universel coordonné-02 | UTC-02 | UTC-02 | -02:00:00 | False |
Azores Standard Time | (UTC-01:00) Les Açores | Les Açores | Les Açores (heure d’été) | -01:00:00 | True |
Cape Verde Standard Time | (UTC-01:00) Îles du Cap-Vert | Cap-Vert | Cap-Vert (heure d’été) | -01:00:00 | False |
Morocco Standard Time | (UTC) Casablanca | Maroc | Maroc (heure d’été) | 00:00:00 | True |
GMT Standard Time | (UTC) Dublin, Édimbourg, Lisbonne, Londres | GMT | GMT (heure d’été) | 00:00:00 | True |
Greenwich Standard Time | (UTC) Monrovia, Reykjavik | Greenwich | Greenwich (heure d’été) | 00:00:00 | False |
UTC | (UTC) Temps universel coordonné | Temps universel coordonné | Temps universel coordonné | 00:00:00 | False |
W. Central Africa Standard Time | (UTC+01:00) Afrique centrale - Ouest | Afr. centrale Ouest | Afr. centrale O. (heure d’été) | 01:00:00 | False |
W. Europe Standard Time | (UTC+01:00) Amsterdam, Berlin, Berne, Rome, Stockholm, Vienne | Europe de l’Ouest | Europe de l’Ouest (heure d’été) | 01:00:00 | True |
Central Europe Standard Time | (UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague | Europe centrale | Europe centrale (heure d’été) | 01:00:00 | True |
Romance Standard Time | (UTC+01:00) Bruxelles, Copenhague, Madrid, Paris | Paris, Madrid | Paris, Madrid (heure d’été) | 01:00:00 | True |
Central European Standard Time | (UTC+01:00) Sarajevo, Skopje, Varsovie, Zagreb | Centre de l’Europe | Europe centrale - heure d’été | 01:00:00 | True |
Namibia Standard Time | (UTC+01:00) Windhoek | Namibie | Namibie (heure d’été) | 01:00:00 | True |
Jordan Standard Time | (UTC+02:00) Amman | Jordanie | Jordanie (heure d’été) | 02:00:00 | True |
GTB Standard Time | (UTC+02:00) Athènes, Bucarest | GTB | GTB (heure d’été) | 02:00:00 | True |
Middle East Standard Time | (UTC+02:00) Beyrouth | Moyen-Orient | Moyen-Orient (heure d’été) | 02:00:00 | True |
Syria Standard Time | (UTC+02:00) Damas | Syrie | Syrie (heure d'été) | 02:00:00 | True |
E. Europe Standard Time | (UTC+02:00) Europe de l’Est | Europe de l’Est | Europe de l’Est (heure d’été) | 02:00:00 | True |
South Africa Standard Time | (UTC+02:00) Harare, Pretoria | Afrique du Sud | Afrique du Sud (heure d’été) | 02:00:00 | False |
FLE Standard Time | (UTC+02:00) Helsinki, Kiev, Riga, Sofia, Tallinn, Vilnius | FLE | FLE (heure d’été) | 02:00:00 | True |
Turkey Standard Time | (UTC+02:00) Istanbul | Turquie | Turquie (heure d’été) | 02:00:00 | True |
Israel Standard Time | (UTC+02:00) Jérusalem | Jérusalem | Jérusalem (heure d’été) | 02:00:00 | True |
Kaliningrad Standard Time | (UTC+02:00) Kaliningrad (RTZ 1) | Russie TZ 1 | Russie TZ 1 (heure d’été) | 02:00:00 | True |
Egypt Standard Time | (UTC+02:00) Le Caire | Égypte | Égypte (heure d’été) | 02:00:00 | True |
Libya Standard Time | (UTC+02:00) Tripoli | Lybie | Lybie (heure d’été) | 02:00:00 | True |
Arabic Standard Time | (UTC+03:00) Bagdad | Arabie | Arabie (heure d’été) | 03:00:00 | True |
Arab Standard Time | (UTC+03:00) Koweït, Riyad | Pays arabes | Pays arabes (heure d’été) | 03:00:00 | False |
Belarus Standard Time | (UTC+03:00) Minsk | Bélarus | Bélarus (heure d’été) | 03:00:00 | True |
Russian Standard Time | (UTC+03:00) Moscou, Saint-Pétersbourg, Volgograd (RTZ 2) | Russie TZ 2 | Russie TZ 2 (heure d’été) | 03:00:00 | True |
E. Africa Standard Time | (UTC+03:00) Nairobi | Afrique de l’Est | Afrique de l’Est (heure d’été) | 03:00:00 | False |
Iran Standard Time | (UTC+03:30) Téhéran | Iran | Iran (heure d’été) | 03:30:00 | True |
Arabian Standard Time | (UTC+04:00) Abu Dhabi, Muscat | Arabie | Arabie (heure d’été) | 04:00:00 | False |
Azerbaijan Standard Time | (UTC+04:00) Bakou | Azerbaïdjan | Azerbaïdjan (heure d’été) | 04:00:00 | True |
Caucasus Standard Time | (UTC+04:00) Erevan | Caucase | Caucase (heure d’été) | 04:00:00 | True |
Russia Time Zone 3 | (UTC+04:00) Izhevsk, Samara (RTZ 3) | Russie TZ 3 | Russie TZ 3 (heure d’été) | 04:00:00 | False |
Mauritius Standard Time | (UTC+04:00) Port Louis | Île Maurice | Île Maurice (heure d’été) | 04:00:00 | True |
Georgian Standard Time | (UTC+04:00) Tbilissi | Géorgie | Géorgie (heure d’été) | 04:00:00 | False |
Afghanistan Standard Time | (UTC+04:30) Kaboul | Afghanistan | Afghanistan (heure d’été) | 04:30:00 | False |
West Asia Standard Time | (UTC+05:00) Achgabat, Tachkent | Asie de l’Ouest | Asie de l’Ouest (heure d’été) | 05:00:00 | False |
Ekaterinburg Standard Time | (UTC+05:00) Iekaterinbourg (RTZ 4) | Russie TZ 4 | Russie TZ 4 (heure d’été) | 05:00:00 | True |
Pakistan Standard Time | (UTC+05:00) Islamabad, Karachi | Pakistan | Pakistan (heure d’été) | 05:00:00 | True |
India Standard Time | (UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi | Inde | Inde (heure d’été) | 05:30:00 | False |
Sri Lanka Standard Time | (UTC+05:30) Sri Jayawardenepura | Sri Lanka | Sri Lanka (heure d’été) | 05:30:00 | False |
Nepal Standard Time | (UTC+05:45) Katmandou | Népal | Népal (heure d’été) | 05:45:00 | False |
Central Asia Standard Time | (UTC+06:00) Astana | Asie centrale | Asie centrale (heure d’été) | 06:00:00 | False |
Bangladesh Standard Time | (UTC+06:00) Dhaka | Bangladesh | Bangladesh (heure d'été) | 06:00:00 | True |
N. Central Asia Standard Time | (UTC+06:00) Novossibirsk (RTZ 5) | Russie TZ 5 | Russie TZ 5 (heure d’été) | 06:00:00 | True |
Myanmar Standard Time | (UTC+06:30) Rangoon | Myanmar | Myanmar (heure d’été) | 06:30:00 | False |
SE Asia Standard Time | (UTC+07:00) Bangkok, Hanoi, Djakarta | Asie du Sud-Est | Asie du Sud-Est (heure d’été) | 07:00:00 | False |
North Asia Standard Time | (UTC+07:00) Krasnoïarsk (RTZ 6) | Russie TZ 6 | Russie TZ 6 (heure d’été) | 07:00:00 | True |
China Standard Time | (UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi | Chine | Chine (heure d’été) | 08:00:00 | False |
North Asia East Standard Time | (UTC+08:00) Irkoutsk (RTZ 7) | Russie TZ 7 | Russie TZ 7 (heure d’été) | 08:00:00 | True |
Singapore Standard Time | (UTC+08:00) Kuala Lumpur, Singapour | Malaisie | Malaisie (heure d’été) | 08:00:00 | False |
Ulaanbaatar Standard Time | (UTC+08:00) Oulan-Bator | Oulan-Bator | Oulan-Bator (heure d'été) | 08:00:00 | False |
W. Australia Standard Time | (UTC+08:00) Perth | Australie (Ouest) | Australie (Ouest) (heure d’été) | 08:00:00 | True |
Taipei Standard Time | (UTC+08:00) Taipei | Taipei | Taipei (heure d’été) | 08:00:00 | False |
Tokyo Standard Time | (UTC+09:00) Osaka, Sapporo, Tokyo | Tokyo | Tokyo (heure d’été) | 09:00:00 | False |
Korea Standard Time | (UTC+09:00) Séoul | Corée | Corée (heure d’été) | 09:00:00 | False |
Yakutsk Standard Time | (UTC+09:00) Yakoutsk (RTZ 8) | Russie TZ 8 | Russie TZ 8 (heure d’été) | 09:00:00 | True |
Cen. Australia Standard Time | (UTC+09:30) Adélaïde | Australie Centre | Australie Centre (heure d’été) | 09:30:00 | True |
AUS Central Standard Time | (UTC+09:30) Darwin | AUS Centre | AUS Centre (heure d’été) | 09:30:00 | False |
E. Australia Standard Time | (UTC+10:00) Brisbane | Australie (Est) | Australie (Est) (heure d’été) | 10:00:00 | False |
AUS Eastern Standard Time | (UTC+10:00) Canberra, Melbourne, Sydney | AUS (Est) | AUS (Est) (heure d’été) | 10:00:00 | True |
West Pacific Standard Time | (UTC+10:00) Guam, Port Moresby | Pacifique Ouest | Pacifique Ouest (heure d’été) | 10:00:00 | False |
Tasmania Standard Time | (UTC+10:00) Hobart | Tasmanie | Tasmanie (heure d’été) | 10:00:00 | True |
Magadan Standard Time | (UTC+10:00) Magadan | Magadan | Magadan (heure d'été) | 10:00:00 | True |
Vladivostok Standard Time | (UTC+10:00) Vladivostok, Magadan (RTZ 9) | Russie TZ 9 | Russie TZ 9 (heure d’été) | 10:00:00 | True |
Russia Time Zone 10 | (UTC+11:00) Chokurdakh (RTZ 10) | Russie TZ 10 | Russie TZ 10 (heure d’été) | 11:00:00 | False |
Central Pacific Standard Time | (UTC+11:00) Îles Salomon, Nouvelle-Calédonie | Pacifique Centre | Pacifique Centre (heure d’été) | 11:00:00 | False |
Russia Time Zone 11 | (UTC+12:00) Anadyr, Petropavlovsk-Kamchatsky (RTZ 11) | Russie TZ 11 | Russie TZ 11 (heure d’été) | 12:00:00 | False |
New Zealand Standard Time | (UTC+12:00) Auckland, Wellington | Nouvelle-Zélande | Nouvelle-Zélande (heure d’été) | 12:00:00 | True |
Fiji Standard Time | (UTC+12:00) Fidji | Fidji | Fidji (heure d’été) | 12:00:00 | True |
Kamchatka Standard Time | (UTC+12:00) Petropavlovsk-Kamchatsky - Ancien | Kamchatka | Kamchatka (heure d’été) | 12:00:00 | True |
UTC+12 | (UTC+12:00) Temps universel coordonné+12 | UTC+12 | UTC+12 | 12:00:00 | False |
Tonga Standard Time | (UTC+13:00) Nuku’alofa | Tonga | Tonga (heure d’été) | 13:00:00 | False |
Samoa Standard Time | (UTC+13:00) Samoa | Samoa américaines | Samoa américaines (heure d’été) | 13:00:00 | True |
Line Islands Standard Time | (UTC+14:00) Kiritimati, Île | Line, Île | Line, Île, (heure d’été) | 14:00:00 | False |
Bonsoir Wicem, merci pour l’article concernant le sujet (.NET Framework). Donc j’aime, je partage sur mon compte Facebook et je tweet sur mon profile twitter de même, pour que tous les gens peuvent le voir. Encore pour la deuxième fois merci.
It’s going to be ending of mine day, but before end I am reading
this impressive piece of writing to improve my knowledge.
Pretty! Τhis ᴡas ɑn incredibly wonderful post.
Ꮇany thanks for providing tһiѕ info.