Основная функция одинакова для всех по-разному:
#include <stdio.h>
#include <time.h>
#include <string.h>
char * gettime();
char * getdate();
int main()
{
printf("The time is %s\n", gettime());
printf("The date is %s\n", getdate());
return 0;
}
Одним из способов вы можете сделать это с манипулированием строк, возвращающиеся из функции CTIME(). Мы знаем, что они построены аналогичным образом, 1-й 12-х символов - это день недели, месяц, месяц-день, затем набирается 8 символов времени, а затем, наконец, год. Можно создать такие функции, как это:
char * gettime()
{
time_t t;
//use static so not to save the var in stack, but in the data/bss segment
//you can also make it a global scope, use dynamic memory allocation, or
//use other methods as to prevent it from being erased when the function returns.
static char * time_str;
time(&t);
time_str = ctime(&t) + 11;
time_str[9] = 0; //null-terminator, eol
return time_str;
}
char * getdate()
{
time_t t;
static char * date_str;
static char * year;
time(&t);
date_str = ctime(&t) + 4;
date_str[6] = 0;
year = date_str + 15;
year[5] = 0;
strcat(date_str, year);
return date_str;
}
Второй способ сделать это с помощью функции МестноеВремя() для создания TM--структуру, а затем извлечь то, что вам нужно от него.
char * gettime()
{
time_t t;
struct tm *info;
static char time_str[10];
time(&t);
info = localtime(&t);
sprintf(time_str,"%d:%d:%d",(*info).tm_hour, (*info).tm_min, (*info).tm_sec);
return time_str;
}
char * getdate()
{
time_t t;
struct tm *info;
static char date_str[12];
time(&t);
info = localtime(&t);
sprintf(date_str,"%d/%d/%d",(*info).tm_mday, (*info).tm_mon+1, (*info).tm_year+1900);
return date_str;
}
Вы можете сделать его немного более чистым, используя функцию STRFTIME():
char * gettime()
{
time_t t;
struct tm *info;
static char time_str[10];
time(&t);
info = localtime(&t);
strftime(time_str, 10, "%S:%M:%H",info);
return time_str;
}
char * getdate()
{
time_t t;
struct tm *info;
static char date_str[12];
time(&t);
info = localtime(&t);
strftime(date_str, 12, "%d:%m:%Y",info);
return date_str;
}
Чтения о [функциях даты и времени в стандартной библиотеке] (HTTP: //en.cppreference. com/w/c/chrono) может помочь. –
Возможный дубликат [как получить дату и время в программе C) (http://stackoverflow.com/questions/1442116/how-to-get-date-and-time-value-in-c-program) – Aracthor
Используйте [strfrtime] (http://man7.org/linux/man-pages/man3/strftime.3.html). –