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

Langage Delphi Discussion :

Comment additionner 2 TDateTime ?


Sujet :

Langage Delphi

  1. #1
    Membre du Club Avatar de ddubois
    Profil pro
    Inscrit en
    Février 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 111
    Points : 47
    Points
    47
    Par défaut Comment additionner 2 TDateTime ?
    J'ai 2 TDateTime que je souhaite ajouter

    La fonction InternalCalcTimeZoneBias renvoie le décalage de l'heure locale par rapport à l'heure GMT soit +2h00 en france en heure d'été (+1h00 en hivers pour info) au format 02:00:00

    Ces 2h00 j'aimerais les ajouter à ma fonction "MaDate:TDateTime" qui représente l'heure GMT, mais l'appel :

    Edit5.Text := DateTimeToStr (MaDate + InternalCalcTimeZoneBias);
    ne fonctionne pas car j'ai -2h00 sur l'heure GMT au lieu de +2h00 !

    Comment cumuler l'heure GMT avec le Décalage soit comment additionner 2 TDateTime ???

    Malgrès mes nombreux tests je n'ai pu trouvé la solution...


    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
     
    //Calculer le décalage de l'heure locale par rapport à l'heure GMT :
     function InternalCalcTimeZoneBias : TDateTime;
     const Time_Zone_ID_DayLight = 2;
     var TZI: TTimeZoneInformation;
         TZIResult: Integer;
         aBias : Integer;
     begin
       TZIResult := GetTimeZoneInformation(TZI);
       if TZIResult = -1 then Result := 0
       else begin
         if TZIResult = Time_Zone_ID_DayLight then aBias := TZI.Bias + TZI.DayLightBias
         else aBias := TZI.Bias + TZI.StandardBias;
         Result := EncodeTime(Abs(aBias) div 60, Abs(aBias) mod 60, 0, 0);
         if aBias < 0 then Result := -Result;
       end;
     end;
     
    begin
     Result := aLocalDateTime + InternalCalcTimeZoneBias;
    end;
    Merci,

    Denis

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 753
    Points : 13 336
    Points
    13 336
    Par défaut
    A l'arrivée, j'ai pas compris dans quel sens tu veux faire ta conversion...

    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
    uses DateUtils;
     
    //UTC -> Local
    function GetLocalTime(aUTC :TDateTime) :TDateTime;
    var
      TZI :TTimeZoneInformation;
    begin
      case GetTimeZoneInformation(TZI) of
        TIME_ZONE_ID_STANDARD : Result := IncMinute(aUTC, -(TZI.Bias +TZI.StandardBias));
        TIME_ZONE_ID_DAYLIGHT : Result := IncMinute(aUTC, -(TZI.Bias +TZI.DaylightBias));
      end;
    end;
     
    //Local -> UTC
    function GetUTC(aLocalTime :TDateTime) :TDateTime;
    var
      TZI :TTimeZoneInformation;
    begin
      case GetTimeZoneInformation(TZI) of
        TIME_ZONE_ID_STANDARD : Result := IncMinute(aLocalTime, TZI.Bias +TZI.StandardBias);
        TIME_ZONE_ID_DAYLIGHT : Result := IncMinute(aLocalTime, TZI.Bias +TZI.DaylightBias);
      end;
    end;

  3. #3
    Membre du Club Avatar de ddubois
    Profil pro
    Inscrit en
    Février 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 111
    Points : 47
    Points
    47
    Par défaut
    Je veux passe de GMT à l'heure locale

    (GMT et UTC c'est pareil ?)

    Merci.

  4. #4
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    bonjour à tout le monde,
    voici des fonctions qui pourront t'aider à résoudre ton problème. pour faire la convertion de:
    "UTC ou GMT ---> Local time" et de "Local time ---> UTC ou GMT":

    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
    function UTCToSystemTime(UTC : TDateTime) : TDateTime; //UTC ou GMT ---> Local time
    var TimeZoneInf : _TIME_ZONE_INFORMATION;
        UTCTime,LocalTime: TSystemTime;
    begin
      if GetTimeZoneInformation(TimeZoneInf) < $FFFFFFFF then
      begin
        DatetimetoSystemTime(UTC,UTCTime);
        if SystemTimeToTzSpecificLocalTime(@TimeZoneInf,UTCTime,LocalTime) then
        begin
         result := SystemTimeToDateTime(LocalTime);
        end else result := UTC;
      end else result := UTC;
      end;
     
     
    function TzSpecificLocalTimeToSystemTime(lpTimeZoneInformation: PTimeZoneInformation;
      var lpLocalTime, lpUniversalTime: TSystemTime): BOOL; stdcall; external kernel32 name 'TzSpecificLocalTimeToSystemTime';
    {$EXTERNALSYM TzSpecificLocalTimeToSystemTime}
     
    function SystemTimeToUTC(Sys : TDateTime):TDateTime; ////Local time ---> UTC ou GMT
    var TimeZoneInf : _TIME_ZONE_INFORMATION;
        SysTime,LocalTime: TSystemTime;
    begin
      if GetTimeZoneInformation(TimeZoneInf) < $FFFFFFFF then
      begin
        DatetimetoSystemTime(Sys, SysTime);
        if TzSpecificLocalTimeToSystemTime(@TimeZoneInf,SysTime,LocalTime) then
          result:=SystemTimeToDateTime(LocalTime)
        else result:=Sys;
      end else result:=Sys
      end;
    A+

Discussions similaires

  1. comment additionner des champs appartenant à la meme table
    Par VIRGINIE87 dans le forum Langage SQL
    Réponses: 25
    Dernier message: 12/04/2007, 14h40
  2. Réponses: 3
    Dernier message: 16/03/2007, 17h49
  3. Comment comparer deux TDateTime ?
    Par [ZiP] dans le forum Delphi
    Réponses: 5
    Dernier message: 26/01/2007, 12h10
  4. Comment additionner les valeurs de 3 labels
    Par morrison29 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 16/11/2006, 19h52
  5. [Excel]Données d'un graph : comment additionner ?
    Par illight dans le forum Excel
    Réponses: 2
    Dernier message: 04/11/2006, 12h30

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