MEJOR SITIO PARA DESARROLLADORES WEB

C++ Tutorial

C++ HOGAR C++ Introducción C++ Empezar C++ Sintaxis C++ Producción C++ Comentarios C++ Variables C++ Entrada de usuario C++ Tipos de datos C++ Operadores C++ Cadenas C++ Matemáticas C++ Booleanos C++ Condiciones C++ Switch C++ While Bucle C++ For Bucle C++ Break/Continue C++ Matrices C++ Estructuras C++ Enumeraciones C++ Referencias C++ Consejos

C++ Funciones

C++ Funciones C++ Parámetros de función C++ Sobrecarga de funciones C++ Alcance C++ Recursión

C++ Clases

C++ POO C++ Clases/Objetos C++ Métodos de clase C++ Constructores C++ Especificadores de acceso C++ Encapsulación C++ Herencia C++ Polimorfismo C++ Archivos C++ Excepciones C++ Fecha

C++ Cómo

Suma dos números Números al azar

C++ Referencia

C++ Referencia C++ Palabras clave C++ <iostream> C++ <fstream> C++ <cmath> C++ <string> C++ <cstring> C++ <ctime>

C++ Ejemplos

C++ Ejemplos C++ Compilador C++ Ejercicios C++ Prueba C++ Certificado

Lenguaje C++. W3Schools lecciones en español

Ua En De Fr

C++ Fecha y hora


Fecha y hora (Date y Time)

La biblioteca <ctime> nos permite trabajar con fechas y horas.

Para usarlo, debes importar el archivo de encabezado <ctime>:

Ejemplo

#include <ctime> // Importar la biblioteca ctime

Mostrar fecha y hora actuales

La biblioteca <ctime> tiene una variedad de funciones para medir fechas y horas.

La función time() nos proporciona una marca de tiempo que representa la fecha y hora actuales. Podemos usar la función ctime() para mostrar la fecha y hora que representa una marca de tiempo:

Ejemplo

Mostrar la fecha actual:

// Obtener la marca de tiempo para la fecha y hora actuales
time_t timestamp;
time(&timestamp);

// Mostrar la fecha y hora representadas por la marca de tiempo
cout << ctime(&timestamp);
Inténtalo tú mismo »

Dos formas de utilizar la función time()

La función time() escribe una marca de tiempo en la ubicación de memoria proporcionada por el parámetro, pero también devuelve el valor de la marca de tiempo.

Una forma alternativa de utilizar la función time() es pasar un puntero NULL y utilizar el valor de retorno en su lugar.

time_t timestamp = time(NULL);

Tipos de datos

Hay dos tipos de datos diferentes que se utilizan para almacenar la fecha y la hora: time_t para marcas de tiempo y struct tm para estructuras de fecha y hora.

Las marcas de tiempo representan un momento en el tiempo como un único número, lo que facilita que la computadora realice cálculos.

Estructuras de fecha y hora son estructuras que representan diferentes componentes de la fecha y la hora como miembros. Esto nos facilita especificar fechas. Las estructuras de fecha y hora tienen los siguientes miembros:

  • tm_sec - Los segundos dentro de un minuto
  • tm_min - Los minutos dentro de una hora
  • tm_hour - La hora dentro de un día (de 0 a 23)
  • tm_mday - El día del mes
  • tm_mon - El mes (del 0 al 11 a partir de enero)
  • tm_year - El número de años desde 1900
  • tm_wday - El día de la semana (de 0 a 6 a partir del domingo)
  • tm_yday - El día del año (de 0 a 365, siendo 0 el 1 de enero)
  • tm_isdst - Positivo cuando el horario de verano está vigente, cero cuando no está vigente y negativo cuando se desconoce

Tenga siempre en cuenta la forma en que se representan los componentes de fecha:

  • Las horas se representan en formato de 24 horas. Las 11 p. m. se representarían como 23.
  • Los meses van del 0 al 11. Por ejemplo, diciembre se representaría como 11 en lugar de 12.
  • Los años se representan en relación con el año 1900. El año 2024 se representaría como 124 porque han pasado 124 años desde 1900.

Creación de marcas de tiempo

La función time() solo puede crear una marca de tiempo para la fecha actual, pero podemos crear una marca de tiempo para cualquier fecha usando mktime() función.

La función mktime() convierte una estructura de fecha y hora en una marca de tiempo.

Ejemplo

Cree una marca de tiempo usando la función mktime():

struct tm datetime;
time_t timestamp;

datetime.tm_year = 2023 - 1900; // Número de años desde 1900
datetime.tm_mon = 12 - 1; // Número de meses desde enero
datetime.tm_mday = 17;
datetime.tm_hour = 12;
datetime.tm_min = 30;
datetime.tm_sec = 1;
// Se debe especificar el horario de verano
// -1 usa la configuración de zona horaria de la computadora
datetime.tm_isdst = -1;

timestamp = mktime(&datetime);

cout << ctime(&timestamp);
Inténtalo tú mismo »

Nota: La función mktime() necesita que estos miembros tengan un valor: tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec y tm_isdst.


Creando estructuras de fecha y hora

La función mktime() también completa los campos tm_wday y tm_yday miembros de la estructura de fecha y hora con los valores correctos, lo que completa la estructura y proporciona una fecha y hora válida. Se puede utilizar, por ejemplo, para encontrar el día de la semana de una fecha determinada:

Ejemplo

Encuentre el día de la semana de una fecha específica:

// Cree la estructura de fecha y hora y use mktime para completar los miembros que faltan
struct tm datetime;
datetime.tm_year = 2023 - 1900; // Número de años desde 1900
datetime.tm_mon = 12 - 1; // Número de meses desde enero
datetime.tm_mday = 17;
datetime.tm_hour = 0; datetime.tm_min = 0; datetime.tm_sec = 0;
datetime.tm_isdst = -1;
mktime(&datetime);

string weekdays[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

cout << "The date is on a " << weekdays[datetime.tm_wday];
Inténtalo tú mismo »

Las funciones localtime() y gmtime() pueden convertir marcas de tiempo en estructuras de fecha y hora.

La función localtime() devuelve un puntero a una estructura que representa la hora en la zona horaria de la computadora.

La función gmtime() devuelve un puntero a una estructura que representa la hora en la zona horaria GMT.

Estas funciones devuelven un puntero a una estructura de fecha y hora. Si queremos asegurarnos de que su valor no cambie inesperadamente, debemos hacer una copia eliminando la referencia al puntero. Para obtener más información sobre la desreferenciación, consulte la página Desreferenciación de C++.

Ejemplo

Obtenga una estructura de fecha y hora y genere la hora actual:

time_t timestamp = time(&timestamp);
struct tm datetime = *localtime(&timestamp);

cout << datetime.tm_hour;
Inténtalo tú mismo »

Mostrar fechas

Hasta ahora hemos estado usando la función ctime() para mostrar la fecha contenida en una marca de tiempo. Para mostrar fechas de una estructura de fecha y hora, podemos usar la función asctime().

Ejemplo

Mostrar la fecha representada por una estructura de fecha y hora:

time_t timestamp = time(NULL);
struct tm datetime = *localtime(&timestamp);

cout << asctime(&datetime);
Inténtalo tú mismo »

Nota: La función asctime() no corrige fechas no válidas. Por ejemplo, si configura el día del mes en 32, mostrará 32. La función mktime() puede corregir este tipo de errores:

Ejemplo

Corregir una fecha antes de mostrarla:

// Cree la estructura de fecha y hora y use mktime para corregir errores
struct tm datetime;
datetime.tm_year = 2022 - 1900; // Número de años desde 1900
datetime.tm_mon = 0; // 0 es enero
datetime.tm_mday = 32;
datetime.tm_hour = 0; datetime.tm_min = 0; datetime.tm_sec = 0;
datetime.tm_isdst = -1;
mktime(&datetime);

cout << asctime(&datetime);
Inténtalo tú mismo »

Las funciones ctime() y asctime() nos permiten mostrar la fecha, pero no nos permiten para elegir cómo se muestra.

Para elegir cómo se muestra una fecha, podemos usar la función strftime().

Ejemplo

Representar la fecha actual de diferentes maneras:

time_t timestamp = time(NULL);
struct tm datetime = *localtime(&timestamp);

char output[50];

strftime(output, 50, "%B %e, %Y", &datetime);
cout << output << "\n";

strftime(output, 50, "%I:%M:%S %p", &datetime);
cout << output << "\n";

strftime(output, 50, "%m/%d/%y", &datetime);
cout << output << "\n";

strftime(output, 50, "%a %b %e %H:%M:%S %Y", &datetime);
cout << output << "\n";
Inténtalo tú mismo »

La función strftime() formatea una fecha y la escribe como una cadena de estilo C en una matriz char. Tiene cuatro parámetros:

  1. El primer parámetro apunta a la matriz de caracteres donde se escribirá la fecha formateada.
  2. El segundo parámetro especifica el espacio disponible en la matriz.
  3. El tercer parámetro nos permite elegir cómo se formatea la fecha usando especificadores de formato.
  4. El último parámetro es un puntero a la estructura de fecha y hora que contiene la fecha que queremos mostrar.

La siguiente tabla tiene algunos especificadores de formato útiles. Para obtener una lista más completa, consulte la página de referencia de strftime().

Especificador de formato Descripción Ejemplo
%a Breve representación del día de la semana Fri
%b Breve representación del nombre del mes Dec
%B Representación completa del nombre del mes December
%d Día del mes con cero a la izquierda 09
%e Día del mes con espacios destacados  9
%H Formato de 24 horas de una hora 14
%I Formato de 12 horas de una hora 02
%M Minutos en una hora 30
%p AM o PM PM
%S Segundos en un minuto 01
%y Representación del año de 2 dígitos 23
%Y Representación del año de 4 dígitos 2023

Medir el tiempo

Hay dos funciones diferentes que se pueden utilizar para medir diferencias en el tiempo.

La función difftime() mide el número de segundos que pasaron entre dos marcas de tiempo diferentes. Esto es útil al medir diferencias horarias entre fechas.

Ejemplo

Mida la diferencia horaria entre dos marcas de tiempo

time_t now;
time_t nextyear;
struct tm datetime;

now = time(NULL);
datetime = *localtime(&now);
datetime.tm_year = datetime.tm_year + 1;
datetime.tm_mon = 0;
datetime.tm_mday = 1;
datetime.tm_hour = 0; datetime.tm_min = 0; datetime.tm_sec = 0;
datetime.is_dst = -1;
nextyear = mktime(&datetime);

int diff = difftime(nextyear, now);

cout << diff << " segundos hasta el año que viene";
Inténtalo tú mismo »

La función reloj() es útil para medir intervalos cortos de tiempo mientras el programa se está ejecutando. Es más precisa que la función difftime().

Cada llamada a la función de reloj devuelve un tipo especial de marca de tiempo medida en relojes (una unidad de tiempo que depende de cómo se implementó la biblioteca) que tiene un tipo de datos clock_t. Para medir una diferencia horaria, almacene una marca de tiempo en dos momentos diferentes y luego réstelos. La diferencia horaria se mide en relojes, pero puedes convertirla en segundos dividiéndola por la constante CLOCKS_PER_SEC.

Ejemplo

Mide cuánto tiempo tarda en ejecutarse el programa:

clock_t before = clock();
int k = 0;
for(int i = 0; i < 100000; i++) {
k += i;
}
clock_t duration = clock() - before;
cout << "Duración: " << (float)duration / CLOCKS_PER_SEC << " seconds";
Inténtalo tú mismo »

Nota: asegúrese de convertir el valor a un tipo float o double antes de dividir; de lo contrario, puede resultar en una división de números enteros que provocaría que se corte la parte decimal.


<ctime> Referencia completa

Para obtener una referencia completa de las funciones <ctime>, vaya a nuestra Referencia de C++ ctime.



Comentarios