Existe-t-il un moyen multiplateforme pour obtenir la date et l'heure actuelles en C ++?
c++
date
time
cross-platform
Max Frai
la source
la source
tm
structure. L'approche C ++ 11 ne donne-t-elle pas simplement l'horodatage Unix (le temps depuis l'époque) bien que la question soit d'obtenir la date et l'heure?Réponses:
En C ++ 11, vous pouvez utiliser
std::chrono::system_clock::now()
Exemple (copié depuis en.cppreference.com ):
Cela devrait imprimer quelque chose comme ceci:
la source
string
fichierstream
ou sur la façon de le formater correctementtime_point<>
, allez-y et posez une autre question ou google après.C ++ partage ses fonctions date / heure avec C. La structure tm est probablement la plus simple pour un programmeur C ++ - les impressions suivantes indiquent la date d'aujourd'hui:
la source
ctime()
avec cette réponse si vous voulez une chaîne de date.struct tm
est-il possible d'appeler simplement delete dessus?delete
(mot-clé c ++) dessus, je pensais juste qu'il devrait être supprimé d'une manière ou d'une autre :) ou qui va le faire pour vous?Vous pouvez essayer le code multiplateforme suivant pour obtenir la date / heure actuelle:
Production:
Veuillez visiter ici pour plus d'informations sur le format date / heure
la source
const
valeur? C'est inutile.Les bibliothèques std C fournissent
time()
. Ceci est à quelques secondes de l'époque et peut être converti en date et enH:M:S
utilisant des fonctions C standard. Boost possède également une bibliothèque heure / date que vous pouvez vérifier.la source
la bibliothèque standard C ++ ne fournit pas un type de date correct. C ++ hérite des structures et des fonctions de manipulation de la date et de l'heure de C, ainsi que de quelques fonctions d'entrée et de sortie date / heure qui prennent en compte la localisation.
la source
Nouvelle réponse à une ancienne question:
La question ne précise pas dans quel fuseau horaire. Il existe deux possibilités raisonnables:
Pour 1, vous pouvez utiliser cette bibliothèque de dates et le programme suivant:
Ce qui vient de sortir pour moi:
La bibliothèque de dates ajoute essentiellement un opérateur de streaming pour
std::chrono::system_clock::time_point
. Il ajoute également beaucoup d'autres fonctionnalités intéressantes, mais qui ne sont pas utilisées dans ce programme simple.Si vous préférez 2 (l'heure locale), il existe une bibliothèque de fuseaux horaires qui s'appuie sur la bibliothèque de dates . Ces deux bibliothèques sont open source et multiplateforme , en supposant que le compilateur prend en charge C ++ 11 ou C ++ 14.
Ce qui pour moi vient de sortir:
Le type de résultat de
make_zoned
est undate::zoned_time
qui est un appariement de adate::time_zone
et de astd::chrono::system_clock::time_point
. Cette paire représente une heure locale, mais peut également représenter UTC, selon la façon dont vous l'interrogez.Avec la sortie ci-dessus, vous pouvez voir que mon ordinateur est actuellement dans un fuseau horaire avec un décalage UTC de -4h et une abréviation d'EDT.
Si un autre fuseau horaire est souhaité, cela peut également être accompli. Par exemple, pour trouver l'heure actuelle à Sydney, en Australie, il suffit de changer la construction de la variable
local
en:Et la sortie se transforme en:
Mise à jour pour C ++ 20
Cette bibliothèque est maintenant largement adoptée pour C ++ 20. L'espace de noms a
date
disparu et tout eststd::chrono
maintenant dans l'espace de noms . Et utiliserzoned_time
à la place demake_time
. Déposez les en-têtes"date.h"
et"tz.h"
et utilisez simplement<chrono>
.Au moment où j'écris ces lignes, des implémentations partielles commencent à peine à émerger sur certaines plateformes.
la source
localtime
me donner l'heure dans mon fuseau horaire?localtime
donne presque toujours l'heure de votre fuseau horaire local avec une seconde précision. Parfois, il échouera en raison de problèmes de sécurité des threads et ne fonctionnera jamais avec une précision inférieure à la seconde.(Pour les autres googleurs)
Il y a aussi Boost :: date_time :
la source
Obtenez l'heure actuelle en utilisant
std::time()
oustd::chrono::system_clock::now()
(ou un autre type d'horloge ).std::put_time()
(C ++ 11) etstrftime()
(C) offrent de nombreux formateurs pour sortir ces temps.La séquence des formateurs est importante:
Les formateurs de
strftime()
sont similaires:Souvent, le formateur de majuscules signifie "version complète" et les minuscules signifient abréviation (par exemple Y: 2017, y: 17).
Les paramètres régionaux modifient la sortie:
Sortie possible ( Coliru , Compiler Explorer ):
J'ai utilisé
std::gmtime()
pour la conversion en UTC.std::localtime()
est fourni pour convertir en heure locale.Tenez compte de ce qui
asctime()
/ctime()
qui a été mentionné dans d'autres réponses est marqué comme obsolète maintenant etstrftime()
devrait être préféré.la source
la source
Oui et vous pouvez le faire avec des règles de formatage spécifiées par les paramètres régionaux actuellement imprégnés:
la source
ostream::sentry
souvent).vous pouvez utiliser la classe horaire C ++ 11:
production:
la source
Il y a toujours la
__TIMESTAMP__
macro du préprocesseur.exemple: dim 13 avr 11:28:08 2014
la source
__TIMESTAMP__
est une macro de préprocesseur qui se développe à l'heure actuelle (au moment de la compilation) sous la forme Jjj Mmm Date hh :: mm :: ss aaaa. La__TIMESTAMP__
macro peut être utilisée pour fournir des informations sur le moment particulier où un binaire a été créé. Référence: cprogramming.com/reference/preprocessor/__TIMESTAMP__.htmlVous pouvez également utiliser directement
ctime()
:la source
#define _CRT_SECURE_NO_DEPRECATE
avant d'inclure pour faire des compilations de programmesJ'ai trouvé ce lien assez utile pour mon implémentation: Date et heure C ++
Voici le code que j'utilise dans mon implémentation, pour obtenir un format de sortie "YYYYMMDD HHMMSS" clair. Le paramètre est pour basculer entre UTC et l'heure locale. Vous pouvez facilement modifier mon code en fonction de vos besoins.
Sortie (UTC, EST):
la source
ptmNow->tm_day < 9
et non<10
?<=9
parce que vous voulez en inclure également 9.1+
dans le code. Le jour / mois commence à 0.Cela fonctionne avec G ++, je ne sais pas si cela vous aide. Sortie du programme:
Code:
la source
Ceci a été compilé pour moi sur Linux (RHEL) et Windows (x64) ciblant g ++ et OpenMP:
la source
Vous pouvez utiliser le code suivant pour obtenir la date et l' heure système actuelles en C ++ :
PS: visitez ce site pour plus d'informations.
la source
Le ffead-cpp fournit plusieurs classes d'utilitaires pour diverses tâches, une de ces classes est la classe Date qui fournit de nombreuses fonctionnalités depuis les opérations Date jusqu'à l'arithmétique des dates, il y a aussi une classe Timer fournie pour les opérations de chronométrage. Vous pouvez voir la même chose.
la source
http://www.cplusplus.com/reference/ctime/strftime/
Cet intégré semble offrir un ensemble raisonnable d'options.
la source
time_t rawTime; time(&rawTime); struct tm *timeInfo; char buf[80]; timeInfo = localtime(&rawTime); strftime(buf, 80, "%T", timeInfo);
Celui-ci met simplement le HH: MM: SS. Mon premier message, donc je ne sais pas comment obtenir le format de code correct. Désolé pour ça.version de localtime_s ():
la source
la source
la source
void main
n'est même pas C / C ++ standard.Vous pouvez utiliser
boost
:la source