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

PL/SQL Oracle Discussion :

Décalage des dates automatique


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Par défaut Décalage des dates automatique
    Bonjour,

    Me revoila avec mes soucis PL/SQL ...

    Voici mon soucis :

    - nous admettrons que les dates sont FRANÇAISES.

    J'ai un script que je lance à un instant T qui va réinitialiser une BDD.
    Ce script va insérer des dates D1 et D2.
    D1 = 15/01/2011 18h00
    D2 = 15/07/2011 18h00

    Je souhaiterais que ces dates soient insérées en UTC dans la BDD en tenant compte du décalage de la date au moment de la date.

    En clair :
    D1 UTC = 15/01/2011 17h00 (car France GMT+1)
    D2 UTC = 15/07/2011 16h00 (car France GMT+2 [Heure d'été])

    Donc en BDD, j'aurai bien mon décalage d'une heure.

    Je pensais réécrire une fonction 'to_date' qui fasse ça ...

    Y a t'il une autre solution ?
    Si NON, comment puis-je faire ça ?

    Je suis entrain de galérer là dessus, dès que j'ai du code je viens le mettre ...

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Le type TIMESTAMP gère les décalages horaires, pas le type date.

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Par défaut
    Je sais que le timestamp gère les timezones, mais ça ne résout malheureusement pas mon souci ...

    En fait il suffirait que j'arrive à détecter le décalage horaire d'une date en fonction de sa timezone, à cette même date ...

    En algo ça donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    fonction toUtcAtDate(Date laDate, Timezone leTZ) {
    // On se positionne à la date voulue
    changeDate(laDate);
    // On récupère le timezone
    INTERVAL decalage = getDecalageFromUtc();
    // On renvoie le décalage
    retourne decalage;
    }
    Aussi ça donnerait en résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    toUtcAtDate('15/01/2011', 'Europe/Paris') => "-1" // Car heure hivers en JANVIER donc GMT+1
    toUtcAtDate('15/07/2011', 'Europe/Paris') => "-2" // Car heure été en JUILLET donc GMT+2
    La subtilité est cette fameuse notion "à la date".

    Sachant que je ne peux pas changer le timezone ou la date d'Oracle car je n'ai pas les droits !!!

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Utilisez TZ_OFFSET.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select tz_offset('Europe/Paris') from dual

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Par défaut
    Alors j'ai réussi à me construire une solution, peut être pas la plus propre, mais qui marche super !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE OR REPLACE FUNCTION dateToUtc(theDate IN DATE)
    RETURN TIMESTAMP
    IS
      utcDate TIMESTAMP;
    BEGIN
      SELECT SYS_EXTRACT_UTC(cast(theDate as timestamp))
      INTO utcDate
      FROM dual;
     
      RETURN utcDate;
    END dateToUtc;
    /
    Ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select dateToUtc(to_date('15/01/11 18:00','DD/MM/RR HH24:MI')) from dual;
    select dateToUtc(to_date('15/07/11 18:00','DD/MM/RR HH24:MI')) from dual;
    Cela me renvoie respectivement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    15/01/11 17:00
    51/07/11 16:00
    Voilaaaaaaaaaaa

    Merci encore à vous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. décalage des dates macro excel
    Par yassinefeki dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/05/2010, 01h17
  2. [XL-2003] Tri automatique des dates
    Par pointp dans le forum Excel
    Réponses: 9
    Dernier message: 22/03/2010, 10h04
  3. Modification automatique des dates
    Par renaud7 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 08/12/2009, 11h32
  4. [XL-2003] date automatique des ouverture d'une feuille
    Par chuspyto dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 11/08/2009, 18h55
  5. Réponses: 5
    Dernier message: 06/07/2007, 18h59

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