Utilisation de TimeStamp

Signaler
Messages postés
12
Date d'inscription
jeudi 25 mars 2004
Statut
Membre
Dernière intervention
12 août 2004
-
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
-
Bonjour,

j'ai un champ de ma base de donnée nommé Timestamp qui est de type Entier long sur 10 chiffres (ex : 1052990591).
J'ai besoin d'extraire ce champ sous Dephi pour récuperer l'heure. Pour cela je voudrais donc le convertir en TTimeStamp sous Delphi.
Malheureusement je ne peux pas l'extraire directement en TimeStamp, je suis obligé de passer par une String, de le convertir en DateTime puis en TTImeStamp... bref c'est pas la joie et surtout ca marche pas.
"1052990591 n'est pas une date et une heure valide" dixit Delphi quand j'essaye de le convertir en DateTime.

   ma_date:=DataModule.Query1.FieldByName('Time_Create').AsString; //Time_Create est un champ de type Long Int sous Access

    ma_date2:=StrToDateTime(ma_date);


Est-ce que quelqu'un saurait comment je peux récupérer ce TimeStamp dans ma base de donnée sous Delphi ?
Merci

13 réponses

Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
3
Si la valeur que tu donnes n'est pas trop bidon, ça pourrait être le nombre de minutes depuis le 1er janvier 0001.
Donc avec
var
TStamp : TTimeStamp;
li : Longint;
Date : TDateTime;
Begin
li := StrToInt('1052990591');
TStamp.Date := Trunc(li/1440); //nombre de jour li :li-1440*(Trunc(li/1440))*60000; // nombre de minutes x 60000 nombre de millisecondes
TStamp.Time := Round(li);
Date := TimeStampToDateTime(TStamp);
end;

Ce qui donne comme date : 04/02/2003 06:05:14

Et ça n'a pas l'air trop con !

Ken@vo
____________________
Code, Code, Codec !
Messages postés
12
Date d'inscription
jeudi 25 mars 2004
Statut
Membre
Dernière intervention
12 août 2004

Ca n'a pas l'air trop con en effet ^^
Je vais tester. En tout cas merci de ton aide.
Messages postés
12
Date d'inscription
jeudi 25 mars 2004
Statut
Membre
Dernière intervention
12 août 2004

Bon j'ai testé et malheuresement cela ne marche pas. Deja la date ne correspond pas à la date de la base de donnée et l'heure ne correspond pas à une heure d'ouverture de la boite où je bosse ^^ (6h c'est un peu tot!)

Mais surtout lorsque je prend une autre valeur de la base de données et bien ca plante (EConvert error 78987,-38478383... n'est pas une heure correcte)

Alors je vais essayer autre chose... mais si vous avez d'autre idées pour m'aider n'hésitez pas.
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
3
Donne donc une liste de ces p... de date en entier sur 10 chiffres, on va regarder. dis nous auusi ce que tu espère récupérer. On va bien trouver !
C'est normal que ça plante : y a un truc négatif ! Y a une parenthèse qui manque !
li := (li-1440*(Trunc(li/1440)))*60000;

Ken@vo
____________________
Code, Code, Codec !
Messages postés
12
Date d'inscription
jeudi 25 mars 2004
Statut
Membre
Dernière intervention
12 août 2004

Toujours la même erreur meme avec li := ((li-1440)*(Trunc(li/1440)))*60000; :'(

Bon voila une petite liste de TimeStamp pour que ce soit plus simple.

Time_Create
--------------
1053008086
1053008177
1053008211

Théoriquement cela doit correspondre au 1er Mai 2003 et l'heure doit théoriquement être comprise entre 8h et 20h...
Messages postés
12
Date d'inscription
jeudi 25 mars 2004
Statut
Membre
Dernière intervention
12 août 2004

D'apèrs la maigre documentation que j'ai reussi à me procurer sur la base de donnée, il s'agierai "Le temps et date de création d'inscription (en secondes)"

Si quelqu'un a une idée je suis preneur =)
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
3
Salut,

Si c'est en secondes, essaie le nombre de secondes depuis le 1er janvier 1970 : c'est un format de date plus ou moins connu en C.

Ca donne 15 mai 2003 14h et quelque pour les trois dates que tu donnes !

Ken@vo
____________________
Code, Code, Codec !
Messages postés
12
Date d'inscription
jeudi 25 mars 2004
Statut
Membre
Dernière intervention
12 août 2004

En effet, j'en avais déjà entendu parler. Mais comment as tu fais pour trouver ces dates ? Je n'arrive pas a trouver d'algo pour faire cette conversion :(
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
3
Tu divises ta valeur par le nombre de secondes par jour (24*3600) et tu obtiens une date qui ressemble au TDateTime de Delphi (partie entière = jour, partie décimale = quantième de journée). Après, tu ajoutes au nombre de jours (depuis le 1er jan 1970) le nombre de jours équivalant au 1er janvier 1970 :

var
  Li : LongInt;
  Jan70 : TDateTime;
  x : real;
  s : string;
begin
  Jan70 := StrToDateTime('01/01/1970 00:00');
  li := 1053008086;
  x:= li / (24 * 3600);  //partie entière=jour + reste
  x:= x + Jan70; // + 1er janvier 1970
  s := DateTimeToStr(x);  // conversion en date
  Label1.Caption := s; // Pour visu
end;


Ken@vo
____________________
Code, Code, Codec !
Messages postés
12
Date d'inscription
jeudi 25 mars 2004
Statut
Membre
Dernière intervention
12 août 2004

Magnifique ca marche parfaitement :) Merci de m'avoir aidé Kenavo, tu m'hôte une grosse épine du pied !
Messages postés
4
Date d'inscription
dimanche 4 mai 2003
Statut
Membre
Dernière intervention
25 janvier 2005

Bonjour, il existe une routine en delphi utilisant l'unité "DateUtils" dans uses

Ce format de date est un format unix.

Pour convertir les valeurs (ex : 1052990591). en date et heure tout en prenant en compte la date du jeudi 1er janvier 1970

il suffit de faire

Label1.caption:=IntToStr(UnixToDateTime(1052990591));

le contraire une date et heure vers XXXXXXXXXX (ex:1052990591)

Label1.caption:=IntToStr(DateTimeToUnix(now));

Cordialement.
Messages postés
249
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
2 mars 2020

Salut,
Puisque vous semblez bien informé au sujet des conversions de dates, j'ai une question à vous soumettre:
Je dois convertir un TimeStamp en date hh mm ss mais je n'arrive pas à savoir comment est construit ce TimeStamp!
exemple: 3375177394 qui devrait correspondre à environ 14/12/2010 à 18h10
J'ai essayé pas mal de chose mais sans résultat!
Qui peut m'aider?

Merci d'avance,
PhilLu
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012

Bonsoir,

il serait certainement plus aisé pour trouver la méthode de calcul de disposer d'un second timestamp ! surtout si c'est du non-standard !

N.B. Un nouveau message sur le forum aurait été aussi souhaitable.

Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein