Fonction delphi [Résolu]

Messages postés
76
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
13 novembre 2008
- - Dernière réponse : l0sth34d2
Messages postés
76
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
13 novembre 2008
- 20 oct. 2007 à 15:00
Bonjour! :P

J'ai chercher sur google et ici pour une function Delphi mais je n'arrive pas a la trouver.. Y a-t-il une function qui permet de retourner " l'asctime " ?
Par exemple, j'aimerais que '1192671766' retourne la date Wed Oct 17 21:42:46 2007 (peut importe le format)

Merci! :P
Afficher la suite 

20/21 réponses

Meilleure réponse
Messages postés
1709
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 novembre 2019
1
3
Merci
J'ai une course à faire, là, mais voilà pour patienter (le code est fonctionnel et quasiment définitif) :

function Asctime(Value: Integer; const Adjust: Boolean = False): string;
var
  D, H, M, S: LongWord;

  function GMTLag: Integer;
  const
    KName = 'SYSTEM\CurrentControlSet\Control\TimeZoneInformation';
  begin
    with TRegistry.Create do
    try
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKey(KName, False) then
      try
        Result := - ReadInteger('ActiveTimeBias');
      finally
        CloseKey;
      end;
    finally
      Free;
    end;
  end;
 
begin
  if Adjust then
    Inc(Value, GMTLag * 60);
  M := Value div 60;
  S := Value mod 60;
  H := M div 60;
  M := M mod 60;
  D := H div 24;
  H := H mod 24;
  Result := DateTimeToStr(25569 + D + EncodeTime(H, M, S, 0));
end;

Si tu passes True en paramètre Lag, le décalage horaire est calculé d'après la valeur stockée dans la base de registres.

A plus.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 205 internautes nous ont dit merci ce mois-ci

Commenter la réponse de japee
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
0
Merci
Salut,

Tu n'as pas dû chercher plus de quelques secondes, il me semble :P

C'EST ICI ! 
Commenter la réponse de Caribensila
Messages postés
76
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
13 novembre 2008
1
0
Merci
??
c'est pour linux
Commenter la réponse de l0sth34d2
Messages postés
76
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
13 novembre 2008
1
0
Merci
Si tu regarde bien le site que tu m'as donné, il est pour la programmation linux :P
Commenter la réponse de l0sth34d2
Messages postés
1709
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 novembre 2019
1
0
Merci
Salut,

Forcément, asctime c'est propre à Linux

En Delphi sous Windows, tu as la fonction :
FileAge()
qui te retourne un entier.
Tu peux convertir cet entier en TDateTime avec :
FileDateToDateTime()
Enfin, avoir l'âge du fichier sous forme de string genre '17/10/07 21:42:46' :
DateTimeToStr()

Bonne prog'
Commenter la réponse de japee
Messages postés
76
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
13 novembre 2008
1
0
Merci
Merci beaucoup! C'est déjà un bon départ dans la resolution de mon probleme Mais..!

J'ai essayer:

showmessage(DateTimeToStr(FileDateToDateTime(1192671766)))

et ça me donne:

2015-08-22 23:16:44

La date qu'il est suposer donner est 2007-10-17 21:42:46

Une petite idée du problème ?
Commenter la réponse de l0sth34d2
Messages postés
1709
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 novembre 2019
1
0
Merci
"Une petite idée du problème ?"

Oui.

1192671766correspond à la date du 22/08/2015 23:16:44
Commenter la réponse de japee
Messages postés
1709
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 novembre 2019
1
0
Merci
Dans l'autre sens :

IntToStr(DateTimeToFileDate(StrToDateTime('17/10/07 21:42:46'))) retourne la valeur 928099671

IntToStr(DateTimeToFileDate(StrToDateTime('22/08/2015 23:16:44'))) retourne 1192671766

Je crois que là tu as tout ce qu'il faut pour te faire une idée.

Bonne prog'

japee
Commenter la réponse de japee
Messages postés
76
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
13 novembre 2008
1
0
Merci
Hum, je suis entrain de faire un client IRC et le server m'envoi comme information que le Topic du canal à été modifier le 1192671766...
Avec mIRC, si on utilise $asctime(1192671766), cela nous donne Wed Oct 17 21:42:46 2007
J'ai tester avec certains programmmes et c'est le meme resultat
Selon la RFC, le temps donné doit etre converti par asctime...
Commenter la réponse de l0sth34d2
Messages postés
1709
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 novembre 2019
1
0
Merci
Avec un peu de chance, cette solution simple pourrait fonctionner :

function AscTime(Value: Integer): string;
begin
  Result := DateTimeToStr(FileDateToDateTime(Value - 264572095));
end;

A tester...

Sinon, va falloir se creuser un peu plus les méninges.
Commenter la réponse de japee
Messages postés
76
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
13 novembre 2008
1
0
Merci
Non ce n'est pas ça .. bien essayé par contre
J'ai trouver a un endroit que AscTime est, en fait, le contraire de ctime

Si par exemple on fait ctime(Fri Oct 19 18:59:38 2007) .. cela donne 1192834778
et si on fait asctime(1192834778) .. cela donne Fri Oct 19 18:59:38 2007

Mais bon! Cela ne m'avance pas vraiment
A mon avis il doit y avoir un calcul a faire avec l'heure local..
Commenter la réponse de l0sth34d2
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
0
Merci
T'as pas bien regardé mon lien, iosth34d2.

«  ... en Temps Universel (TU).  »
Commenter la réponse de Caribensila
Messages postés
76
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
13 novembre 2008
1
0
Merci
Caribensila, dsl, mais ça ne me donne pas plus une idée de comment procédé.. :P
Commenter la réponse de l0sth34d2
Messages postés
1709
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 novembre 2019
1
0
Merci
Moi, ce que j'ai compris de la fonction asctime utilisée par d'autres langages, c'est qu'elle prend en paramètre une structure ou un pointeur sur cette structure.
Donc si tu ne disposes pas d'une de ces données, comment coder une fonction qui décoderait chaque élément de la structure ?
Commenter la réponse de japee
Messages postés
1709
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 novembre 2019
1
0
Merci
Bon, je crois que j'ai compris.

Je pense qu'il faut travailler sur une valeur de type Integer correspondant au nombre de secondes écoulées depuis le 1er Janvier 1970 à 00h 00m 00s.

J'ai fait quelques essais, mais je n'arrive pas exactement au résultat :
pour 1192671766 j'obtiens la date du 18/10/2007 01:42:46

On n'est pas loin quand même, hein ?
Commenter la réponse de japee
Messages postés
1709
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 novembre 2019
1
0
Merci
Il me faudrait d'autres valeurs pour tester, mais il semble que j'obtiens 4 heures de plus.

1192834778 : 19/10/2007 22:59:38 (au lieu de 19/10/2007 18:59:38)
1192671766 : 18/10/2007 01:42:46 (au lieu de 17/10/2007 21:42:46)

Sans doute un décalage entre heure GMT et heure locale, un truc comme ça.

Heu... visiblement d'après ta fiche tu postes du Québec : c'est donc plausible !
Commenter la réponse de japee
Messages postés
76
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
13 novembre 2008
1
0
Merci
Mon dieu japee.. t'es en feu lol

Oui je viens du québec, donc pour le code que tu as reussi a faire, il ne manquerais plus qu'a soustraire le "GMT" a la date/heure ?

Voila d'autres valeurs pour test tests..

18000 = Wed Jan 1 00:00:00 1970
942512400 = Nov 13 12:00:00 1999
1008859831 = Dec 20 9:50:31 2001
1138806116 = Feb 1 10:01:56 2006
Commenter la réponse de l0sth34d2
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
0
Merci
L'heure, pour le Québec (Est) = TU - 4




C'est d'ailleurs rigolo de remarquer que

ce système des fuseaux horaires a été inventé par un Québécois, Sir Sandford Fleming en 1876.   
Commenter la réponse de Caribensila
Messages postés
76
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
13 novembre 2008
1
0
Merci
GMT-5
Commenter la réponse de l0sth34d2
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
0
Merci
Vu dans Wikipedia:




UTC-5 (EST ou ET)
EST, Eastern Standard Time (heure standard de l'Est de l'amérique du nord)
HNE, Heure normale de l'Est (au Canada)
Canada* :
   Québec* (ouest)
   Ontario* (est)




UTC-4 (AST)
AST, Atlantic Standard Time (heure standard de l'Atlantique)
HNA, Heure normale de l'Atlantique (au Canada)
Canada :
   Labrador* (sauf la pointe sud-est)
   Nouveau-Brunswick*
   Nouvelle-Écosse*
   Île du Prince-Édouard*
   Québec* (est)

Mais t'es mieux placé que nous pour le savoir,  l0sth34d2     
Commenter la réponse de Caribensila