Table SQL des changements d’heure d’été et d’hiver

Voici une fonction table qui permet d’obtenir toutes les dates de changement d’heure d’été et d’hiver avec le décalage UTC des années de 1976 à 2100 ou d’une année précise.


CREATE FUNCTION dbo.F_CHANGEMENT_HEURE (@AN INT)  
   RETURNS @T TABLE (AN SMALLINT, JOUR DATETIME, SAISON VARCHAR(5), DECALAGE_UTC SMALLINT)  
AS  
BEGIN  
DECLARE @DD DATETIME, @AND SMALLINT, @ANF SMALLINT;  
SELECT @AND = COALESCE(@AN, 1976), @ANF = COALESCE(@AN, 2100)  
WHILE @AND <= @ANF  
BEGIN  
-- passage à l'heure d'été, le dernier dimanche de mars à 1h  
   SET @DD = CAST(CAST(@AND AS CHAR(4)) + '0331 00:01' AS DATETIME);  
   WHILE DATEPART(weekday, @DD) <> 7  
      SET @DD = DATEADD(day, -1, @DD);  
   INSERT INTO @T VALUES (@AND, @DD, 'Été', +2);        
   IF @AND < 1996
   BEGIN
   -- passage à l'heure d'été, le dernier dimanche de septembre à 1h  
      SET @DD = CAST(CAST(@AND AS CHAR(4)) + '0930 00:01' AS DATETIME);  
      WHILE DATEPART(weekday, @DD) <> 7  
         SET @DD = DATEADD(day, -1, @DD);  
      INSERT INTO @T VALUES (@AND, @DD, 'Hiver', +2);        
   END    
   ELSE
   BEGIN
-- passage à l'heure d'hiver, le dernier dimanche d'octobre à 1h  
      SET @DD = CAST(CAST(@AND AS CHAR(4)) + '1031 00:01' AS DATETIME);  
      WHILE DATEPART(weekday, @DD) <> 7  
         SET @DD = DATEADD(day, -1, @DD);  
      INSERT INTO @T VALUES (@AND, @DD, 'Hiver', +1);              
   END    
   SET @AND = @AND + 1;    
END    
RETURN;  
END    
GO

Exemple 1 : pour l’année 2012


SELECT * FROM dbo.F_CHANGEMENT_HEURE(2012)
 
AN     JOUR                    SAISON DECALAGE_UTC
------ ----------------------- ------ ------------
2012   2012-03-25 00:01:00.000 Été    2
2012   2012-10-28 00:01:00.000 Hiver  1

Exemple 2 : pour toutes les années de (1976 à 2100)


SELECT * FROM dbo.F_CHANGEMENT_HEURE(NULL)
 
AN     JOUR                    SAISON DECALAGE_UTC
------ ----------------------- ------ ------------
1976   1976-03-28 00:01:00.000 Été    2
1976   1976-09-26 00:01:00.000 Hiver  2
1977   1977-03-27 00:01:00.000 Été    2
...
1995   1995-03-26 00:01:00.000 Été    2
1995   1995-09-24 00:01:00.000 Hiver  2
1996   1996-03-31 00:01:00.000 Été    2
1996   1996-10-27 00:01:00.000 Hiver  1
...
2011   2011-03-27 00:01:00.000 Été    2
2011   2011-10-30 00:01:00.000 Hiver  1
2012   2012-03-25 00:01:00.000 Été    2
2012   2012-10-28 00:01:00.000 Hiver  1
...
2100   2100-03-28 00:01:00.000 Été    2
2100   2100-10-31 00:01:00.000 Hiver  1

Limites :

Les horaires d’été et d’hiver on été appliqués en France de 1917 à 1945 puis de nouveau à partir de 1976 suite au choc pétrolier. Actuellement ils sont définit du dernier dimanche de Mars au dernier dimanche d’octobre. Comme me l’a fait remarqué sevyc64, avant 1996 cela se faisait du dernier dimanche de mars au dernier dimanche de septembre.


--------
Frédéric Brouard, SQLpro - ARCHITECTE DE DONNÉES, http://sqlpro.developpez.com/
Expert bases de données relationnelles et langage SQL. MVP Microsoft SQL Server
www.sqlspot.com : modélisation, conseil, audit, optimisation, tuning, formation
* * * * *  Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence  * * * * *

MVP Microsoft SQL Server

2 réflexions au sujet de « Table SQL des changements d’heure d’été et d’hiver »

  1. Avatar de sevyc64sevyc64

    ATTENTION, le calcul est partiellement faux !

    Les horaires d’été du dernier dimanche de Mars au dernier dimanche d’octobre ne sont appliqués en France que depuis 1996 (et harmoniser au niveau de l’Europe à ces dates là depuis 1998). Auparavant cela se faisait du dernier dimanche de mars au dernier dimanche de septembre.

    Tous les pays d’Europe n’appliquent pas l’horaire d’été, mais ceux qui l’appliquent sont obligés de respecter ces dates-là, amis avec la liberté de choisir 1 ou 2h de décalage par rapport au fuseau horaire.

    De nombreux autres pays sont sur un schéma du 2nd dimanche de mars au dernier dimanche d’octobre, d’autres encore (dont les états-unis mais pas tous les états) sont du 2nd dimanche de mars au premier dimanche de novembre.

Laisser un commentaire