IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Conversion Local date <-> UTC


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Points : 6
    Points
    6
    Par défaut Conversion Local date <-> UTC
    bonjour
    J'aurai quelques question concernant la gestion des dates par sql server:

    - j'aurai voulu savoir en quel type de date ( local time ou UTC ) sql server gère les dates ??
    - est il possible qu'a partir d'une chaine de connection SQL on puisse récupérer des données avec un référentiel en UTC ( conversion d'un local date en UTC et vice versa )

    merci d'avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    1) - j'aurai voulu savoir en quel type de date ( local time ou UTC ) sql server gère les dates ??
    local donc Time Zone et heure d'été.

    2) - est il possible qu'a partir d'une chaine de connection SQL on puisse récupérer des données avec un référentiel en UTC ( conversion d'un local date en UTC et vice versa )
    Facile : implémentez une table des changement d'horaires et des décalages de fuseau.

    Pour ma part voici le modèle que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    -- ************************************************************************
    -- FUSEAUX HORAIRES ET PASSAGE AUX HORAIRES D'ÉTÉ ET D'HIVER
    -- ************************************************************************
     
    /**************************************************************************
    * IMPORTANT : le stockage de la donnée d'information du fuseau horaire doit
    * être porté sur le capteur. En effet imaginons que nous surveillons les
    * crues d'un cours d'eau faisant frontière (exemple, le Rio Guadiana 
    * faisant frontière entre le Portugal et l'espagne) alors, il se peut que
    * les capteurs d'un pays soient réglés sur un fuseau donné qui n'est pas 
    * le même que celui de son voisin...
    **************************************************************************/
     
    -- ************************************************************************
    -- ATTENTION : 
    -- 1) ces tables n'ont pas encore de schéma SQL associés, il s'agit
    -- d'une maquette
    -- 2) il conviendra de placer ces tables sur un espace de stockage en
    -- lecture seule
    -- ************************************************************************
     
     
    -- création de la table des décalages horaire par rapport au fuseau
    CREATE TABLE T_FUSEAU_FSO
    (FSO_CODE                      CHAR(2) NOT NULL PRIMARY KEY,  
     FSO_NOM_AERO                  CHAR(8) NOT NULL UNIQUE,
     FSO_DESIGNATION_CODE_US       CHAR(4) NOT NULL UNIQUE, 
     FSO_DESIGNATION_LIBELLE_US    VARCHAR(64), 
     FSO_DESIGNATION_CODE_FR       CHAR(4) , 
     FSO_DESIGNATION_LIBELLE_FR    VARCHAR(64), 
     FSO_DECALAGE_UTC              SMALLINT NOT NULL 
                                   CHECK (FSO_DECALAGE_UTC BETWEEN -12 
                                                               AND  12));
    GO
     
    -- insertion des fuseaux européens
    INSERT INTO T_FUSEAU_FSO 
    VALUES ('Z', 'Zoulou', 'WET', 'Western European Time', NULL, NULL, 0);
    INSERT INTO T_FUSEAU_FSO 
    VALUES ('A', 'Alpha', 'CET', 'Central European Time', 'HNEC', 
            'heure normale de l''Europe centrale', 1);
     
     
    -- table des zones de changement d'horaires
    CREATE TABLE T_ZONE_CHANGE_HEURE_ZCH
    (ZCH_ID                       SMALLINT IDENTITY NOT NULL PRIMARY KEY,
     ZCH_REGION                   VARCHAR(64) NOT NULL);
    GO
     
    -- insertion des données de changement d'horaire
    SET IDENTITY_INSERT T_ZONE_CHANGE_HEURE_ZCH ON;
    INSERT INTO T_ZONE_CHANGE_HEURE_ZCH (ZCH_ID, ZCH_REGION)
           VALUES (1, 'CEE : Communauté Économique Européenne');
    SET IDENTITY_INSERT T_ZONE_CHANGE_HEURE_ZCH OFF;
     
    -- table des dates des changements d'horaire
    CREATE TABLE T_CHANGE_HEURE_DATE_AN_CHD 
    (CHD_AN                       SMALLINT NOT NULL,
     ZCH_ID                       SMALLINT NOT NULL 
                 FOREIGN KEY 
                 REFERENCES T_ZONE_CHANGE_HEURE_ZCH (ZCH_ID),
     CHD_DATEHEURE_CHANGE_ETE     DATETIME,
     CHD_DATEHEURE_CHANGE_HIVER   DATETIME,
     CHD_DECALAGE_ETE             SMALLINT);
    GO
     
    -- insertion des données des changements d'horaire pour 
    -- la zone europe de 2001 jusqu'en 2020
    DECLARE @AN SMALLINT, @DD DATETIME, @DF DATETIME;
    SET @AN = 2001;
    SET DATEFIRST 1;
    WHILE @AN < 2020
    BEGIN 
    -- passage à l'heure d'été, le dernier dimanche de mars à 1h
       SET @DD = CAST(CAST(@AN AS CHAR(4)) + '0331 00:01' AS DATETIME);
       WHILE DATEPART(weekday, @DD) <> 7
          SET @DD = DATEADD(day, -1, @DD);
    -- passage à l'heure d'hiver, le dernier dimanche d'octobre à 1h
       SET @DF = CAST(CAST(@AN AS CHAR(4)) + '1031 00:01' AS DATETIME);
       WHILE DATEPART(weekday, @DF) <> 7
          SET @DF = DATEADD(day, -1, @DF);
       INSERT INTO T_CHANGE_HEURE_DATE_AN_CHD VALUES (@AN, 1, @DD, @DF, 1);
       SET @AN = @AN + 1;
    END
    GO
     
    -- création de la table des zones des fuseaux horaires
    CREATE TABLE T_ZONE_FUSEAU_ZFS
    (ZFS_ID          INT NOT NULL IDENTITY PRIMARY KEY,    
     ZFS_NOM         VARCHAR(128) NOT NULL,
     FSO_CODE        CHAR(2) NOT NULL 
                     FOREIGN KEY REFERENCES T_FUSEAU_FSO (FSO_CODE),
     ZCH_ID          SMALLINT NOT NULL 
                     FOREIGN KEY REFERENCES T_ZONE_CHANGE_HEURE_ZCH (ZCH_ID));
    GO
     
    SET IDENTITY_INSERT T_ZONE_FUSEAU_ZFS ON;
    -- insertion des zones géographiques et leur dépendance au fuseau horaire
    INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID) 
    VALUES (1, 'Royaume-Uni', 'Z', 1);
    INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID) 
    VALUES (2, 'Irlande', 'Z', 1);
    INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID) 
    VALUES (3, 'Portugal', 'Z', 1);
    INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID) 
    VALUES (4, 'Allemagne', 'A', 1);
    INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID) 
    VALUES (5, 'Autriche', 'A', 1);
    INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID) 
    VALUES (6, 'Belgique', 'A', 1);
    INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID) 
    VALUES (7, 'Espagne', 'A', 1);
    INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID) 
    VALUES (8, 'Italie', 'A', 1);
    INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID) 
    VALUES (9, 'Pays-Bas', 'A', 1);
    INSERT INTO T_ZONE_FUSEAU_ZFS (ZFS_ID, ZFS_NOM, FSO_CODE, ZCH_ID) 
    VALUES (10, 'Suisse', 'A', 1);
    --...
    SET IDENTITY_INSERT T_ZONE_FUSEAU_ZFS OFF;
    GO


    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Conversion de date GMT en date locale
    Par mayayu dans le forum C
    Réponses: 10
    Dernier message: 17/05/2007, 15h23
  2. Date UTC en local date
    Par Poisson59 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/10/2006, 15h20
  3. - [CAST ou CONVERT] Problème de conversion de date
    Par Boublou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 14h31
  4. Conversion de date lors d'un import
    Par bilbon.S dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 26/03/2004, 14h33
  5. Conversion de date et division 64 bits
    Par dway dans le forum Assembleur
    Réponses: 38
    Dernier message: 27/01/2004, 10h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo