TimeStampToDateTime [Résolu]

papyvore 138 Messages postés samedi 15 novembre 2003Date d'inscription 12 décembre 2017 Dernière intervention - 16 nov. 2017 à 13:42 - Dernière réponse : papyvore 138 Messages postés samedi 15 novembre 2003Date d'inscription 12 décembre 2017 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 
138Messages postés samedi 15 novembre 2003Date d'inscription 12 décembre 2017 Dernière intervention

3 réponses

Répondre au sujet
korgis 392 Messages postés samedi 17 mai 2003Date d'inscription 24 novembre 2017 Dernière intervention - Modifié par korgis le 16/11/2017 à 15:57
0
Utile
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 392 Messages postés samedi 17 mai 2003Date d'inscription 24 novembre 2017 Dernière intervention - 16 nov. 2017 à 17:23
0
Utile
1
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 138 Messages postés samedi 15 novembre 2003Date d'inscription 12 décembre 2017 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.