TimeStampToDateTime

Résolu
papyvore Messages postés 223 Date d'inscription samedi 15 novembre 2003 Statut Membre Dernière intervention 16 décembre 2021 - 16 nov. 2017 à 13:42
papyvore Messages postés 223 Date d'inscription samedi 15 novembre 2003 Statut Membre Dernière intervention 16 décembre 2021 - 17 nov. 2017 à 11:13
Bonjour,
j'ai une valeur hexa $0022B5D3CA07C701 qui devrait m'afficher
18/09/2006 08:56:34
(d'aprés un lecteur Hex ) ce qui correspond a quelques minutes à ce que j'attend.

je ne sait pas convertir la valeur hexa en TimeStamp pour utiliser DateTimeToStr( TimeStampToDateTime(valeur TimeStamp) ) .
j'ai aussi essayé
DateTimeToStr( FileDateToDateTime(StrToInt('$0022B5D3CA07C701')));
sans plus de succès.
quelqu’un a une idée ??
merci.

2 réponses

korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
Modifié le 16 nov. 2017 à 15:57
Salut,

Une piste ici :

https://stackoverflow.com/questions/4420188/how-to-format-a-unix-timestamp-in-delphi

Chez moi sous D7, la fonction "UnixToDateTime" me retourne une valeur erronée, à moins de modifier le type du 2ème paramètre :

//function UnixToDateTime(const AValue: Int64): TDateTime;
function UnixToDateTime(const AValue: LongWord): TDateTime;
begin
  Result := AValue / SecsPerDay + UnixDateDelta;
end;


Ce qui revient à utiliser la fonction d'hikari sur la page précitée :

// 4x faster than dateutils version
function UNIXTimeToDateTimeFAST(UnixTime: LongWord): TDateTime;
begin
Result := (UnixTime / 86400) + 25569;
end;


Sauf qu'en la testant avec tes valeurs, elle retourne une valeur relativement éloignée de celle que tu attends.

J'ai modifié la valeur "UnixDateDelta" et là, on arrive presque à la valeur attendue :

function UNIXTimeToDateTimeFAST4(UnixTime: LongWord): TDateTime;
const
  MyUnixDateDelta = 252; // valeur que j'ai modifiée
begin
  Result := (UnixTime / 86400) - MyUnixDateDelta;
end;


Là, en partant de la valeur '$0022B5D3CA07C701' j'obtiens cette date et heure : 18/09/2006 09:48:49, qui est proche de celle que tu cherches à obtenir.

Pas le temps de creuser plus avant !

Bonne prog'
korgis
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
16 nov. 2017 à 17:23
Donc après test, pour obtenir la TDateTime correspondant à "18/09/2006 08:56:34" à partir de la valeur "$0022B5D3CA07C701", voici la fonction magique :

function UnknownTimeToDateTime(UnknownTime: LongWord): TDateTime;
const
  DeltaValue = 252.03628;
  SecsPerDay = 86400; // SysUtils
begin
  Result := (UnknownTime / SecsPerDay) - DeltaValue;
end;


à vérifier avec d'autre valeurs !
0
papyvore Messages postés 223 Date d'inscription samedi 15 novembre 2003 Statut Membre Dernière intervention 16 décembre 2021 15
17 nov. 2017 à 11:13
salut
merci je prend :)
mais je regarde quand même de ce coté

var FileDate : tTimeStamp;

FileDate.Time := 35812000
FileDate.Date := 732629;
ShowMessage('TimeStampToDateTim ' + DateTimeToStr(TimeStampToDateTime(FileDate)));
0
Rejoignez-nous