Equivalent a date () du php

Contenu du snippet

Ben il remplace la fonction date() du php.
Les parametres de la fonction sont a peu pres les memes, la source est assez commentée pour que vous puissiez faire des equivalents.
On peut largement l optimiser (virer les std::string...), mais cette version est suffisament simple pour etre comprise par tous (je n ai pas massacré le code dans l espoir de gagner quelques cycles =D )

Source / Exemple :


#include <time.h>
#include <string>

/*
	Fonction date similaire a celle du Php
	on lui passe en parametre le format de la date que l on veut:
	h = heure
	i = minutes (le m est déja pris par mois)
	s = secondes
	d = le jour du mois, en chiffres
	D = le jour de la semaine, en lettres (ex = Lundi)
	m = le mois en chiffre
	M = le mois en lettres (ex = Janvier)
	y = l année courante (ex = 2004)

	Exemple d appel:
	date ("h:i:s").c_str() donne 23:15:21

  • /
std::string date (std::string format) { std::string szDate=""; time_t raw; struct tm* timeinfo; // recupere le temps ecoule de le 1er janvier 1970 time(&raw); // puis obtient une structure tm qui contient toutes les infos dont on a besoin timeinfo = localtime(&raw); if (!timeinfo) return ""; // Definition de quelques trucs utiles :D static char* days[]={"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"}; static char* months[]={"Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre"}; char buffer[32]; // conversions via itoa for (int i = 0; i < format.size();i++) { switch (format[i]) { // Heure case 'h': itoa(timeinfo->tm_hour, &buffer[0], 10); szDate += buffer; break; // minute case 'i': itoa(timeinfo->tm_min, &buffer[0], 10); szDate += buffer; break; // secondes case 's': itoa(timeinfo->tm_sec, &buffer[0], 10); szDate += buffer; break; // jour (chiffre) case 'd': itoa(timeinfo->tm_mday, &buffer[0], 10); szDate += buffer; break; // jour (lettres) case 'D': szDate += days[timeinfo->tm_wday]; break; // mois (chiffre) case 'm': itoa(timeinfo->tm_mon, &buffer[0], 10); szDate += buffer; break; // mois (lettres) case 'M': szDate += months[timeinfo->tm_mon]; break; // annee (chiffre) case 'y': itoa(timeinfo->tm_year+1900, &buffer[0], 10); szDate += buffer; break; // Si on trouve un caractere autre, on l ajoute au résultat default: szDate += format[i]; break; } } return szDate; } int main () { printf ("%s\nIl est actuellement %s\n", date("d/m/y = D d M y").c_str(), date("h:i:s").c_str()); return 0; }

Conclusion :


Ben voila, enjoy :)

A voir également

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.