¿Hay alguna forma multiplataforma para obtener la fecha y hora actuales en C ++?
c++
date
time
cross-platform
Max Frai
fuente
fuente
tm
estructura. ¿El enfoque de C ++ 11 no solo da la marca de tiempo de Unix (tiempo desde época) aunque la pregunta era acerca de cómo obtener la fecha y la hora?Respuestas:
En C ++ 11 puedes usar
std::chrono::system_clock::now()
Ejemplo (copiado de en.cppreference.com ):
Esto debería imprimir algo como esto:
fuente
string
archivostream
o cómo formatearlo correctamentetime_point<>
, continúe y haga otra pregunta o busque en Google después.C ++ comparte sus funciones de fecha / hora con C. La estructura tm es probablemente la más fácil para que trabaje un programador de C ++: lo siguiente imprime la fecha de hoy:
fuente
ctime()
junto con esta respuesta si desea una cadena de fecha.struct tm
es posible simplemente llamar a eliminar en él?delete
(palabra clave c ++), solo pensé que debería eliminarse de alguna manera :) ¿o quién va a hacer eso por usted?Puede probar el siguiente código multiplataforma para obtener la fecha / hora actual:
Salida:
Visite aquí para obtener más información sobre el formato de fecha / hora
fuente
const
valor? Eso no tiene sentido.Las bibliotecas estándar de C proporcionan
time()
. Esto es segundos de la época y se puede convertir a la fecha yH:M:S
usar las funciones estándar de C. Boost también tiene una biblioteca de hora / fecha que puede consultar.fuente
la biblioteca estándar de C ++ no proporciona un tipo de fecha adecuado. C ++ hereda las estructuras y funciones para la manipulación de fecha y hora de C, junto con un par de funciones de entrada y salida de fecha / hora que tienen en cuenta la localización.
fuente
Nueva respuesta para una vieja pregunta:
La pregunta no especifica en qué zona horaria. Hay dos posibilidades razonables:
Para 1, puede usar esta biblioteca de fechas y el siguiente programa:
Lo que acaba de salir para mí:
La biblioteca de fechas esencialmente solo agrega un operador de transmisión para
std::chrono::system_clock::time_point
. También agrega muchas otras funcionalidades agradables, pero eso no se usa en este simple programa.Si prefiere 2 (la hora local), hay una biblioteca de zonas horarias que se construye sobre la biblioteca de fechas . Ambas bibliotecas son de código abierto y multiplataforma , suponiendo que el compilador sea compatible con C ++ 11 o C ++ 14.
Lo que para mí acaba de salir:
El tipo de resultado de
make_zoned
es a,date::zoned_time
que es un emparejamiento de aydate::time_zone
astd::chrono::system_clock::time_point
. Este par representa una hora local, pero también puede representar UTC, dependiendo de cómo lo consulte.Con la salida anterior, puede ver que mi computadora está actualmente en una zona horaria con un desplazamiento UTC de -4h, y una abreviatura de EDT.
Si se desea alguna otra zona horaria, eso también se puede lograr. Por ejemplo, para encontrar la hora actual en Sydney, Australia, simplemente cambie la construcción de la variable
local
a:Y la salida cambia a:
Actualización para C ++ 20
Esta biblioteca ahora se adopta en gran medida para C ++ 20. El espacio de nombres
date
se ha ido y todo está en el espacio de nombresstd::chrono
ahora. Y usarzoned_time
en lugar demake_time
. Caída de las cabeceras"date.h"
y"tz.h"
y sólo tiene que utilizar<chrono>
.Mientras escribo esto, las implementaciones parciales apenas comienzan a surgir en algunas plataformas.
fuente
localtime
darme el tiempo en mi zona horaria?localtime
será casi siempre le dará el tiempo en su zona horaria local para la segunda precisión. A veces fallará debido a problemas de seguridad de subprocesos, y nunca funcionará para una precisión de un segundo.(Para compañeros de googlers)
También hay Boost :: date_time :
fuente
Obtenga la hora actual usando
std::time()
ostd::chrono::system_clock::now()
(u otro tipo de reloj ).std::put_time()
(C ++ 11) ystrftime()
(C) ofrecen muchos formateadores para generar esos tiempos.La secuencia de los formateadores es importante:
Los formateadores de
strftime()
son similares:A menudo, el formateador de capital significa "versión completa" y en minúscula significa abreviatura (por ejemplo, Y: 2017, y: 17).
La configuración regional altera la salida:
Salida posible ( Coliru , Compiler Explorer ):
Lo he usado
std::gmtime()
para la conversión a UTC.std::localtime()
se proporciona para convertir a hora local.Tenga en cuenta que
asctime()
/ctime()
que se mencionaron en otras respuestas están marcadas como obsoletas ahora ystrftime()
deben preferirse.fuente
fuente
Sí, y puede hacerlo con las reglas de formato especificadas por la configuración regional actualmente imbuida:
fuente
ostream::sentry
tan a menudo).podrías usar la clase de tiempo C ++ 11:
fuera puesto:
fuente
Siempre está la
__TIMESTAMP__
macro del preprocesador.ejemplo: dom abr 13 11:28:08 2014
fuente
__TIMESTAMP__
es una macro de preprocesador que se expande a la hora actual (en tiempo de compilación) en la forma Ddd Mmm Date hh :: mm :: ss aaaa. La__TIMESTAMP__
macro se puede usar para proporcionar información sobre el momento particular en que se construyó un binario. Consulte: cprogramming.com/reference/preprocessor/__TIMESTAMP__.htmlTambién puedes usar directamente
ctime()
:fuente
#define _CRT_SECURE_NO_DEPRECATE
antes de incluir para hacer compilaciones de programasEste enlace me pareció bastante útil para mi implementación: C ++ Fecha y hora
Aquí está el código que uso en mi implementación, para obtener un formato de salida claro "AAAAMMDD HHMMSS". El parámetro es para cambiar entre la hora UTC y la hora local. Puede modificar fácilmente mi código para satisfacer su necesidad.
Salida (UTC, EST):
fuente
ptmNow->tm_day < 9
y no<10
?<=9
porque desea incluir también 9.1+
en el código. Día / mes comienza en 0.Esto funciona con G ++. No estoy seguro de si esto te ayuda. Salida del programa:
Código:
fuente
Esto se compiló para mí en Linux (RHEL) y Windows (x64) dirigido a g ++ y OpenMP:
fuente
Puede usar el siguiente código para obtener la fecha y hora actuales del sistema en C ++ :
PD: visite este sitio para obtener más información.
fuente
El ffead-CPP ofrece múltiples clases de utilidad para diversas tareas, una de estas clases es la fecha clase que ofrece un montón de características derecha desde operaciones aritméticas de fecha a fecha, también hay un temporizador de la clase prevista operaciones de cronometraje. Puedes echar un vistazo a lo mismo.
fuente
http://www.cplusplus.com/reference/ctime/strftime/
Este incorporado parece ofrecer un conjunto razonable de opciones.
fuente
time_t rawTime; time(&rawTime); struct tm *timeInfo; char buf[80]; timeInfo = localtime(&rawTime); strftime(buf, 80, "%T", timeInfo);
este en particular solo pone el HH: MM: SS. Mi primera publicación, así que no estoy seguro de cómo obtener el formato de código correcto. Lo siento por eso.versión localtime_s ():
fuente
fuente
fuente
void main
ni siquiera es C / C ++ estándar.Podrías usar
boost
:fuente