Timestamp [Résolu]

Signaler
Messages postés
4
Date d'inscription
samedi 13 novembre 2004
Statut
Membre
Dernière intervention
23 janvier 2006
-
Messages postés
250
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
4 septembre 2020
-
Ma question est une toute simple question de debutant comment fait on pour ajouter a un timestamp une durée par exemple : 01:30 puis de reconvertir tout cela pour l'afficher dans un Tedit j'ai cherché mais j'ai rien trouvé. Merci d'avance pour vos reponses

13 réponses

Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
salut,

plutot que d'utiliser un Ttimestamp que tu ne peut pas afficher directement utilises plutot un Tdatetime çà donne:

Syntaxe Delphi :



function EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime;





Description



La fonction EncodeTime renvoie une valeur de type TDateTime à partir des heure, minutes, secondes et millisecondes données.



Les valeurs admises vont de 0 à 23.



Les valeurs de minute et de seconde admises vont de 0 à 59.



Les valeurs de milliseconde admises vont de 0 à 999.



Si les valeurs indiquées sont en-dehors de ces limites, EncodeTime déclenche une exception EConvertError.



La valeur résultante est égale à un nombre compris entre 0 (inclusif)
et 1 (exclusif) qui indique la partie fractionnaire du jour en fonction
de l'heure indiquée ou (avec une valeur 1,0) minuit du jour suivant. La
valeur 0 correspond à minuit, 0,5 correspond à midi, 0,75 correspond à
18:00, et ainsi de suite.





procedure TForm1.Button3Click(Sender: TObject);

var apres:Tdatetime;

timestamp:Ttimestamp;

begin

apres:=encodetime( 0,1,30,0); //convertit 1mn30s en Tdatetime

label1.Caption:=timetostr(apres+now);// ajoute 1mn30s à l'heure actuelle et l'affiche

timestamp:=DateTimeToTimeStamp( apres+now); // pour l'exemple on la convertit en TTimeStamp

label2.Caption:=timetostr(now);// affiche l'heure actuelle

end;



@+

jlen
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
excuses petite erreur de frappe

var temps:TdateTime;

timestamp:Ttimestamp;



temps:=TimeStampToDateTime(timestamp);
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
29
Est-ce réellement utile de passer par des timestamps ?

Dixit l'aide de Delphi : "Utilisez TTimeStamp pour représenter des valeurs date-heure quand une grande précision est nécessaire dans la partie horaire.Quand les valeurs horaires n'ont pas besoin d'être précises àla milliseconde près,utilisez la représentation TDateTime qui est plus compacte."

Les timestamps expriment le nombre de secondes écoulées depuis une certaine date (01/01/1970). Si tu veux ajouter une durée, alors il faut la convertir dans le même unité, c'est à dire en secondes.
Ma question est : utilises-tu le TTimeStamp fourni avec Delphi ou une autre structure de données ?

<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
4
Date d'inscription
samedi 13 novembre 2004
Statut
Membre
Dernière intervention
23 janvier 2006

En fait je n'est pas specialement envie d'utiliser les timestamps mais la valeur de depart est un timestamp que l'utilisateur rentre dans un Tedit que je ne sait pas comment convertir en Tdatetime. Ensuite le programme doit ajouter une durée a tout cela et pour finir afficher le tout dans un Tedit au format 22/01/2006 20:29:18 (resolu merci jlen100).
Donc derniere question comment convertir un timestamp en Tdatetime merci.
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
la routine de convertion de timestamp en date time est TimeStampToDateTime

Syntaxe Delphi :



function TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime;





Description



Appelez TimeStampToDateTime pour convertir une valeur TTimeStamp en
objet TDateTime. Les valeurs TTimeStamp représentent l'heure en
séparant la date et l'heure, où la date est le nombre de jours
calendaires écoulés depuis le début du calendrier actuel (le premier
janvier 0001 aurait la valeur 1), et l'heure est le nombre de
millisecondes depuis minuit. Les objets TDateTime représentent l'heure
comme le nombre de jours écoulés depuis le 30 décembre 1899 à midi.

var temps:TdateTime;



temps:=TimeStampToDateTime(temps);



@+

jlen
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
29
Allez jlen100, il te reste à écrire la fonction qui transformera une chaine de caractères en un TTimeStamp (avec un minimum de contrôles, bien sur, sinon ce ne serait pas drôle ). Je te cède volontiers ce plaisir...


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
4
Date d'inscription
samedi 13 novembre 2004
Statut
Membre
Dernière intervention
23 janvier 2006

Merci a tous

apres:=encodetime(h.Value,m.Value,s.Value,0);
Result := EncodeDate(1970, 1, 1) + ((strtofloat(edit1.Text)+(strtofloat(inttostr(SpinEdit1.Value))*3600)) / 86400);
resultat.text := datetimetostr(result+apres);

Voila j'ai trouvé ca car avec ca:
temps:=TimeStampToDateTime(timestamp);
j'ai une erreur du compilateur : edit pas compatible avec timestamp (enfin qqc comme ca)
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
wouaf, wouaf encore que je ne me sois pas trop pousser en écriture
puisque c'est un copier coller de l'aide (mais tu l'avais dèjà
compris!!) et quitte à convertir ..... bon aller je retourne à mes
microsecondes (en 'C') et ça fait déjà quelques jours que je suis
dessus et ce n'est pas fini. Ah les communications à haut débit qu'est
ce ça prend comme temps!!

@+

jlen
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
temps étant un Tdatetime pour l'affecter au TEdit il faut le convertir en string en faisant:

label2.Caption:=timetostr(temps)

@+

jlen
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
Au fait delphiprog pour la saisie il suffit d'utiliser un TMaskEdit en
utilisant le mask heure longue dans la propriété EditMask quand à
reconvertir en timestamp il n'y aurait aucun intérêt puisque toutes le
fonctions de delphi sont pour des TDatetime. et que pour convertir une
chaine en heure:minute:seconde il y a la fonction StrtoTime() ou
StrtoTimeDef() qui le font à ma place.

Azerty9862 tu aurais plutot avantage à convertir tes timestamp
enTDatetime au départ et à ne travailler qu' avec le type
Tdatetime ensuite.

Un autre conseil évite de déclarer une variable result qui est réservée au retour des resultat de fonction .

@+

jlen
Messages postés
250
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
4 septembre 2020

En faisant:
var temps:TdateTime;
temps:=TimeStampToDateTime(strtotime(edit1.Text));
retourne Types incompatible: 'TTimeStamp' et 'TDateTime'

J'ai 3378806399 à convertir en DateTime (auquel je dois ajouter 1904 (1er janvier à 0h 0min et 0 sec)
celà devrait donner qq chose comme 25/01/2011 14:45:00
Je n'en sors vraiment pas!!!
Help!
Merci pour votre aide!!!
PhilLu
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
29
Bonjour PhiLU,

Pourquoi veux-tu utiliser TimestampToDateTime ?
Ceci compile sans problème :
var
  temps:TdateTime;
begin
  temps := StrtoDatetime(edit1.Text);
end;


Peux-tu indiquer si le chiffre que tu donnes correspond au nombre de secondes écoulées depuis le 1/1/1970 (timestamp Unix) ou depuis le 1/1/2001 (timestamp delphi) ?

May Delphi be with you

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
250
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
4 septembre 2020

Ni unix ni Delphi,
Le nombre représente le nombre de secondes depuis le 1er janvier 1904 à 0h 0mkn et 0 sec.
J'ai essayé de créer une fct pour extraire les années, mois, jours, h, mkn et secondes mais pour la division quelle valeur doit on utilkser pour le nombre de jours dans un mois???
Merci
PhilLu