TimeStampToDateTime [Résolu]

Messages postés
161
Date d'inscription
samedi 15 novembre 2003
Dernière intervention
10 décembre 2018
- - Dernière réponse : papyvore
Messages postés
161
Date d'inscription
samedi 15 novembre 2003
Dernière intervention
10 décembre 2018
- 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 
A voir également:

Votre réponse

2 réponses

Messages postés
423
Date d'inscription
samedi 17 mai 2003
Dernière intervention
4 août 2018
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
Messages postés
423
Date d'inscription
samedi 17 mai 2003
Dernière intervention
4 août 2018
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
Messages postés
161
Date d'inscription
samedi 15 novembre 2003
Dernière intervention
10 décembre 2018
-
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.