Utilitaires
Scripts
Divers
Jeux
Rechercher
Quillevere.net
Réflexions informatiques

Convertir une date UTC (GMT) en heure locale

23/09/2008
Voici une fonction SQL Server qui permet de convertir une date/heure au format UTC vers le format local français, à savoir +1 h en hiver et +2h en été.

IF OBJECT_ID ('[50005].[DATE_UTC_VERS_LOCAL]') IS NOT NULL
    DROP FUNCTION [50005].[DATE_UTC_VERS_LOCAL];
GO

CREATE FUNCTION [50005].[DATE_UTC_VERS_LOCAL]
    (
     @date_utc DATETIME
    )
    RETURNS DATETIME

    AS

    -- ================================================
    -- Calcule la date locale à partir de la date UTC
    -- =============================================
    -- Author: Eric Quillévéré
    -- Create date: 23/09/08
    -- =============================================    

    BEGIN
    -- Declare variables
    DECLARE @date_locale        AS DATETIME;
   
    DECLARE @annee                AS INTEGER;
    DECLARE @mois                AS INTEGER;
    DECLARE @jour                AS INTEGER;
    DECLARE @jourSemaine        AS INTEGER;
    DECLARE @concatDate            AS VARCHAR(8); -- Année Mois Jour concaténés

    DECLARE @dernDimanche        AS DATETIME;    
    DECLARE @dernDimancheMars    AS DATETIME;
    DECLARE @dernDimancheOct    AS DATETIME;
   
    DECLARE @i                    AS INTEGER;
   
    -- Si la date est comprise dans la plage de l'heure d'été, on ajoute 2h
    -- Sinon, on ajoute une 1h

    -- Calcule le dernier dimanche de l'année
    SELECT @annee=DATEPART(YEAR, @date_utc);

    --  Deux calculs à faire
    SET @i=1;
    WHILE @i<=2
        BEGIN

       
        IF (@i=1)
            SET @mois=3 ;
        ELSE
            SET @mois=10 ;
       
        SET @jour=31;

        --SET @concatDate    = CAST(@annee AS VARCHAR) + CAST(@mois AS VARCHAR) + CAST(@jour AS VARCHAR) ;
        SELECT @dernDimanche = CAST( (CAST(@annee AS VARCHAR) + '/'+ CAST(@mois AS VARCHAR) + '/'+ CAST(@jour AS VARCHAR)) AS DATETIME);
       
        -- Calcule le dernier dimanche
        -- Dimanche=1, lundi = 2
        SELECT @jourSemaine=DATEPART(weekday, @dernDimanche);
        WHILE( @jourSemaine<>1)
            BEGIN
            SET @jour=@jour-1;

            SELECT @dernDimanche = CAST( (CAST(@annee AS VARCHAR) + '/'+ CAST(@mois AS VARCHAR) + '/'+ CAST(@jour AS VARCHAR)) AS DATETIME);
            SELECT @jourSemaine=DATEPART(weekday, @dernDimanche);
            END
               

        IF (@i=1)
            SET @dernDimancheMars=CAST(CAST(@annee AS VARCHAR) + '/'+ CAST(@mois AS VARCHAR) + '/'+ CAST(@jour AS VARCHAR) + ' 02:00:00' AS DATETIME);
        ELSE
            SET @dernDimancheOct=CAST(CAST(@annee AS VARCHAR) + '/'+ CAST(@mois AS VARCHAR) + '/'+ CAST(@jour AS VARCHAR) + ' 03:00:00' AS DATETIME);
        SET @i=@i+1;

        END
   

    -- Rajoute une heure ou deux ?
    IF (@date_utc>=@dernDimancheMars AND @date_utc<=@dernDimancheOct)
        SELECT @date_locale=DATEADD(HOUR, 2, @date_utc);
    ELSE
        SELECT @date_locale=DATEADD(HOUR, 1, @date_utc);
       
    RETURN @date_locale;
       
    END
GO
Dernière modification le 08/03/2019 - Quillevere.net

Rechercher sur le site

rss RSS info Informations