TimeStampToDateTime [Résolu]

papyvore 159 Messages postés samedi 15 novembre 2003Date d'inscription 1 août 2018 Dernière intervention - 16 nov. 2017 à 13:42 - Dernière réponse : papyvore 159 Messages postés samedi 15 novembre 2003Date d'inscription 1 août 2018 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

3 réponses

korgis 424 Messages postés samedi 17 mai 2003Date d'inscription 4 août 2018 Dernière intervention - Modifié par korgis le 16/11/2017 à 15:57
0
Merci
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
Commenter la réponse de korgis
korgis 424 Messages postés samedi 17 mai 2003Date d'inscription 4 août 2018 Dernière intervention - 16 nov. 2017 à 17:23
0
Merci
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 !
papyvore 159 Messages postés samedi 15 novembre 2003Date d'inscription 1 août 2018 Dernière intervention - 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)));
Commenter la réponse de korgis

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.