From c68e4e87b327ad21cd664e50ee2b5ef4ded3aed9 Mon Sep 17 00:00:00 2001 From: Timerix Date: Tue, 18 Nov 2025 16:00:50 +0500 Subject: [PATCH] fixed DateTime_get bugs and added FMT_DateTime --- include/tlibc/time.h | 31 ++++++++++++++++++++++--------- src/time.c | 12 ++++++------ 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/include/tlibc/time.h b/include/tlibc/time.h index e21f897..0b6777e 100644 --- a/include/tlibc/time.h +++ b/include/tlibc/time.h @@ -29,18 +29,18 @@ void sleepMsec(msec_t time); typedef struct Time { - i32 nsec; - i8 sec; - i8 min; - i8 hour; + i32 nsec; /* 0..999_999_999 */ + i8 sec; /* 0..60 leap second??? */ + i8 min; /* 0..59 */ + i8 hour; /* 0..23 */ } Time; typedef struct Date { - i8 month_day; - i8 month; - i16 year; - i8 week_day; - i16 year_day; + i8 month_day; /* 1..31 */ + i8 month; /* 1..12 */ + i16 year; /* 1900-xxxx */ + i8 week_day; /* 1..7 */ + i16 year_day; /* 1..366 */ } Date; typedef struct DateTime { @@ -52,6 +52,19 @@ void DateTime_get(DateTime* dt, bool utc_time); static inline void DateTime_getLocal(DateTime* dt) { DateTime_get(dt, false); } static inline void DateTime_getUTC(DateTime* dt) { DateTime_get(dt, true); } +// yyyy.MM.dd_HH-mm-ss +#define FMT_DateTime_fileName "%04i.%02i.%02i_%02i-%02i-%02i" +// yyyy.MM.dd HH:mm:ss +#define FMT_DateTime_text "%04i.%02i.%02i %02i:%02i:%02i" +/* +USAGE: + DateTime dt; + DateTime_getLocal(&dt); + printf(FMT_DateTime_text, DT_expand(dt)); +*/ +#define DT_expand(dt) dt.d.year, dt.d.month, dt.d.month_day, dt.t.hour, dt.t.min, dt.t.sec + + #if __cplusplus } #endif diff --git a/src/time.c b/src/time.c index 6fe6b39..53d5b11 100644 --- a/src/time.c +++ b/src/time.c @@ -51,21 +51,21 @@ void sleepMsec(msec_t time){ void DateTime_get(DateTime* dt, bool utc_time){ time_t c_time = time(NULL); struct tm c_tm; + struct timespec c_timespec; if(utc_time){ portable_gmtime_s(&c_time, &c_tm); } else { portable_localtime_s(&c_time, &c_tm); } - struct timespec c_timespec; clock_gettime(CLOCK_REALTIME, &c_timespec); dt->t.nsec = c_timespec.tv_nsec; - dt->t.sec = c_timespec.tv_sec; + dt->t.sec = c_tm.tm_sec; dt->t.min = c_tm.tm_min; dt->t.hour = c_tm.tm_hour; dt->d.month_day = c_tm.tm_mday; - dt->d.month = c_tm.tm_mon; - dt->d.year = c_tm.tm_year; - dt->d.week_day = c_tm.tm_wday; - dt->d.year_day = c_tm.tm_yday; + dt->d.month = c_tm.tm_mon + 1; + dt->d.year = c_tm.tm_year + 1900; + dt->d.week_day = c_tm.tm_wday + 1; + dt->d.year_day = c_tm.tm_yday + 1; }