See site in english Voir le site en francais
Website skin:
home  download  forum  link  contact

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

Author Topic: Calcul de temps difficile  (Read 2338 times)

0 Members and 1 Guest are viewing this topic.

Offline Vladimir2000

  • Hero Member
  • *****
  • Posts: 755
  • Karma: 2
13 August 2013, 23:30:11
Bonsoir à tous, je cherche un moyen de convertir des secondes au format Y/D/H/M/S (Années, Jours, Heures, Minutes, Secondes).

Par exemple, avez vous une formule ou autre pour convertir 15130305 Secondes au format précité ?

Merci et bonne soirée.

PS: Vous devriez trouver 5/5/5/5/5 (J'avais déjà fait l'opération inverse qui est plus facile).


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #1 - 14 August 2013, 06:58:03
Dans quel langage ?


Offline SolarLiner

  • Global Moderator
  • Legend
  • *****
  • Posts: 2769
  • Country: France fr
  • Karma: 55
  • a été remercié par Le Créateur
Reply #2 - 14 August 2013, 12:41:09
Pour tout les langages managés en .NET, la méthode la plus simple est la suivante:
Code: [Select]
int seconds = 15130305; // N'importe quelle valeur ici
long ticks = seconds*10^7; // On convertit en "ticks"
DateTime DateHandle = new DateTime(ticks); // Initialisation de la variable contenant la date
string result = String.Format("{0:yyy/dd/mm/ss}", DateHandle); // Devrait afficher "0005/05/05/05"

Maintenant si DateTime n'existe pas, il faut "renverser" l'équation pour trouver la date en fonction des secondes (contrairement à ce que tu as fait au départ)

Code: [Select]
// C++
int secs = 15130305;
int year, days, hour, mins, rSecs // rSecs est la var pour les secondes de la date

year = Floor(secs/60/60/24/365);
days = Floor(secs/60/60/24)-year*365;
hour = Floor(secs/60/60)-(days*24)-(365*24*year);
mins = Floor(secs/60)-(hour*60)-(days*24*60)-(year*60*24*365);
rSecs = Floor(secs)-(mins*60)-(hour*60*60)-(days*24*60*60)-(year*60*60*24*365); // Je crois que c'est aussi compliqué, faut voir

char[256] result;
sprintf(result, "%i/%i/%i/%i/%i", year, days, hour, mins, rSecs);

Normalement j'ai bon pour le coup du C++, un autre corrigera si jamais ^^


Offline Vladimir2000

  • Hero Member
  • *****
  • Posts: 755
  • Karma: 2
Reply #3 - 14 August 2013, 15:18:01
Oulala, j’aurais du préciser, je ne parlais pas de langage de programmation, tout simplement de français, je cherche juste la formule mathématique basique. Je ne sais pas programmer malheureusement...
Désolé de t'avoir fait chercher pour rien...


Offline orbiter28

  • Legend
  • ******
  • Posts: 2679
  • Karma: 15
Reply #4 - 14 August 2013, 23:37:03
Bien, je ne vais pas te donner la formule, mais juste un exemple, je te laisse le reprendre.

15130305 / 31536000 < 0
donc moins d'un an.

15130305 / 86400 = 175.119...

donc environ 175 jours = 15130305 - 86400 * 175 secondes près, soit 175 jours et 10305 secondes.

10305 - 3600 * 2 = 3105, donc 2 heures à 3105 secondes près.

et on continue avec les minutes, et les secondes.

En cherchant, tu trouveras :)


Offline Vladimir2000

  • Hero Member
  • *****
  • Posts: 755
  • Karma: 2
Reply #5 - 15 August 2013, 15:04:44
Merci de ta réponse, j'ai finalement trouver un online converter.  J'ai un bol monstre c'est le seul qui me file du YDHMS.