valores todas tipos retornan que pedir las hora funciones fecha ejemplos ejemplo como c datetime

todas - tipos de funciones en c



¿Cómo obtener los valores de fecha y hora en un programa C? (8)

Tengo algo como esto:

char *current_day, *current_time; system("date +%F"); system("date +%T");

Imprime el día y la hora actuales en el stdout, pero quiero obtener este resultado o asignarlos a las variables current_day y current_time , para poder hacer algún procesamiento con esos valores más adelante.

current_day ==> current day current_time ==> current time

La única solución que se me ocurre ahora es dirigir la salida a algún archivo, y luego leer el archivo y luego asignar los valores de fecha y hora a current_day y current_time . Pero creo que esta no es una buena manera. ¿Hay alguna otra manera corta y elegante?


Las respuestas dadas anteriormente son buenas respuestas CRT, pero si lo desea, también puede usar la solución Win32 para esto. Es casi idéntico, pero IMO si está programando para Windows también podría usar su API (no sé si está programando en Windows en realidad, pero lo que sea)

char* arrDayNames[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; // Jeez I hope this works, I haven''t done this in ages and it''s hard without a compiler.. SYSTEMTIME st; GetLocalTime(&st); // Alternatively use GetSystemTime for the UTC version of the time printf("The current date and time are: %d/%d/%d %d:%d:%d:%d", st.wDay, st.wMonth, st.wYear, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds); printf("The day is: %s", arrDayNames[st.wDayOfWeek]);

De todos modos, esta es su solución de Windows. Espero que te sea útil en algún momento!


Recibo el siguiente error al compilar el código de Adam Rosenfield en Windows. Resulta que faltan algunas cosas en el código.

Error (antes)

C:/C/Codes>gcc time.c -o time time.c:3:12: error: initializer element is not constant time_t t = time(NULL); ^ time.c:4:16: error: initializer element is not constant struct tm tm = *localtime(&t); ^ time.c:6:8: error: expected declaration specifiers or ''...'' before string constant printf("now: %d-%d-%d %d:%d:%d/n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); ^ time.c:6:36: error: expected declaration specifiers or ''...'' before ''tm'' printf("now: %d-%d-%d %d:%d:%d/n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); ^ time.c:6:55: error: expected declaration specifiers or ''...'' before ''tm'' printf("now: %d-%d-%d %d:%d:%d/n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); ^ time.c:6:70: error: expected declaration specifiers or ''...'' before ''tm'' printf("now: %d-%d-%d %d:%d:%d/n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); ^ time.c:6:82: error: expected declaration specifiers or ''...'' before ''tm'' printf("now: %d-%d-%d %d:%d:%d/n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); ^ time.c:6:94: error: expected declaration specifiers or ''...'' before ''tm'' printf("now: %d-%d-%d %d:%d:%d/n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); ^ time.c:6:105: error: expected declaration specifiers or ''...'' before ''tm'' printf("now: %d-%d-%d %d:%d:%d/n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); ^ C:/C/Codes>

Solución

C:/C/Codes>more time.c #include <stdio.h> #include <time.h> int main() { time_t t = time(NULL); struct tm tm = *localtime(&t); printf("now: %d-%d-%d %d:%d:%d/n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); } C:/C/Codes>

Compilando

C:/C/Codes>gcc time.c -o time C:/C/Codes>

Salida final

C:/C/Codes>time now: 2018-3-11 15:46:36 C:/C/Codes>

Espero que esto ayude a otros también



Use time() y localtime() para obtener la hora:

#include <time.h> time_t t = time(NULL); struct tm tm = *localtime(&t); printf("now: %d-%d-%d %d:%d:%d/n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);


en lugar de archivos use pipes y si usa wana C y no C ++ puede usar popen como este

#include<stdlib.h> #include<stdio.h> FILE *fp= popen("date +F","r");

y use * fp como un puntero de archivo normal con fgets y todo

si usa cadenas de c ++, fork un hijo, invoque el comando y luego canalícelo al padre.

#include <stdlib.h> #include <iostream> #include <string> using namespace std; string currentday; int dependPipe[2]; pipe(dependPipe);// make the pipe if(fork()){//parent dup2(dependPipe[0],0);//convert parent''s std input to pipe''s output close(dependPipe[1]); getline(cin,currentday); } else {//child dup2(dependPipe[1],1);//convert child''s std output to pipe''s input close(dependPipe[0]); system("date +%F"); }

// hacer un 1 similar para la fecha + T, pero realmente te recomiendo que te quedes con las cosas a tiempo.h GL


strftime (C89)

Martin lo mencionó , he aquí un ejemplo:

#include <stdio.h> #include <time.h> int main() { time_t t = time(NULL); struct tm *tm = localtime(&t); char s[64]; strftime(s, sizeof(s), "%c", tm); printf("%s/n", s); }

Muestra de salida:

Thu Apr 14 22:39:03 2016

El especificador %c produce el mismo formato que ctime .

Una ventaja de esta función es que devuelve el número de bytes escritos, lo que permite un mejor control de errores en caso de que la cadena generada sea demasiado larga.

asctime y ctime (C89)

asctime es una forma conveniente de formatear una struct tm :

#include <stdio.h> #include <time.h> int main() { time_t t = time(NULL); struct tm *tm = localtime(&t); printf("%s/n", asctime(tm)); }

Que produce un formato de salida fijo como:

Wed Jun 10 16:10:32 2015

Y también hay ctime() que el estándar dice que es un atajo para:

asctime(localtime())

Como mencionó Jonathan Leffler , el formato tiene la desventaja de no tener información de zona horaria.

POSIX 7 marcó esas funciones como "obsoletas" por lo que podrían eliminarse en futuras versiones:

Los desarrolladores estándar decidieron marcar las funciones asctime () y asctime_r () como obsoletas, aunque asctime () está en el estándar ISO C debido a la posibilidad de desbordamiento del búfer. El estándar ISO C también proporciona la función strftime () que se puede usar para evitar estos problemas.

Versión C ++ de esta pregunta: ¿Cómo obtener la hora y fecha actual en C ++?


#include<stdio.h> using namespace std; int main() { printf("%s",__DATE__); printf("%s",__TIME__); return 0; }


time_t rawtime; time ( &rawtime ); struct tm *timeinfo = localtime ( &rawtime );

También puede usar strftime para formatear la hora en una cadena.