Ответ 1
Время Unix - секунды с начала эпохи (1970-01-01). В зависимости от того, что вы имеете в виду, вы можете преобразовать его в struct tm
с помощью localtime или преобразовать в строку с помощью strftime.
time_t t = time(NULL);
struct tm *tm = localtime(&t);
char date[20];
strftime(date, sizeof(date), "%Y-%m-%d", tm);
Как указано в руководстве по местному времени
Возвращаемое значение указывает на статически распределенное структура, которая может быть перезаписана последующими вызовами к любому из функции даты и времени.
Это то, что некоторые называют гонками данных. Это происходит, когда два или более потоков вызывают localtime
одновременно.
Чтобы защититься от этого, некоторые предлагают использовать localtime_s
, который является единственной функцией Microsoft. В системах POSIX вы должны использовать localtime_r
вместо этого
Функция localtime_r() делает то же самое, но сохраняет данные в предоставленной пользователем структуре.
Использование будет выглядеть как
time_t t = time(NULL);
struct tm res;
localtime_r(&t, &res);