概要
C 言語で現在時刻を取得し、エポック秒から時間、分などの表記に変換する方法をメモ(毎回忘れるので🙃)。
方法
コレ↓
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <errno.h>
int main(){
struct timespec ts = (struct timespec){0};
struct tm lt = (struct tm){0};
if(clock_gettime(CLOCK_REALTIME, &ts) == -1){
fprintf(stderr, "clocl_gettime() failed with errno %d, line %d, file %s\n", errno, __LINE__, __FILE__);
return -1;
}
memcpy(<, localtime(&(ts.tv_sec)), sizeof(struct tm));
printf("Current time: %d/%d/%d, %d:%d:%d\n", lt.tm_year + 1900, lt.tm_mon + 1, lt.tm_mday, lt.tm_hour, lt.tm_min, lt.tm_sec);
return 0;
}
スレッドセーフ版
localtime()
はスレッドアンセーフとのこと。
localtime_r()
というスレッドセーフ版を使うと↓のカンジ。
struct tm newtime;
time_t ltime;
char buf[50];
ltime=time(<ime);
localtime_r(<ime, &newtime);
printf("The date and time is %s", asctime_r(&newtime, buf));