diff --git a/components/libc/Kconfig b/components/libc/Kconfig index 49b97481d1285203780dd65ec5866e66fffeb811..8a790c298d693fd5b1d086f27dad982ab2d6c0fc 100644 --- a/components/libc/Kconfig +++ b/components/libc/Kconfig @@ -55,8 +55,14 @@ endif if RT_USING_LIBC != y config RT_LIBC_USING_TIME - bool "Enable TIME FUNCTIONS WITHOUT COMPILER'S LIBC" + bool "Enable time functions without compiler's libc" default y endif +config RT_LIBC_FIXED_TIMEZONE + depends on (RT_LIBC_USING_TIME || RT_USING_LIBC) + int "Manually set a fixed time zone (UTC+)" + range -12 12 + default 8 + endmenu diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index 72542867d23db0269a1e8ffeff75c3f0aa974952..deda18a5605fdc835617ad89f56566f57be0bef5 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -30,6 +30,10 @@ #define DBG_LVL DBG_INFO #include +#ifndef RT_LIBC_FIXED_TIMEZONE +#define RT_LIBC_FIXED_TIMEZONE 8 /* UTC+8 */ +#endif + /* seconds per day */ #define SPD 24*60*60 @@ -208,14 +212,11 @@ struct tm* gmtime(const time_t* t) } RTM_EXPORT(gmtime); -/*TODO: timezone */ struct tm* localtime_r(const time_t* t, struct tm* r) { time_t local_tz; - int utc_plus; - utc_plus = 8; /* GMT: UTC+8 */ - local_tz = *t + utc_plus * 3600; + local_tz = *t + RT_LIBC_FIXED_TIMEZONE * 3600; return gmtime_r(&local_tz, r); } RTM_EXPORT(localtime_r); @@ -227,15 +228,12 @@ struct tm* localtime(const time_t* t) } RTM_EXPORT(localtime); -/* TODO: timezone */ time_t mktime(struct tm * const t) { time_t timestamp; - int utc_plus; - utc_plus = 8; /* GMT: UTC+8 */ timestamp = timegm(t); - timestamp = timestamp - 3600 * utc_plus; + timestamp = timestamp - 3600 * RT_LIBC_FIXED_TIMEZONE; return timestamp; } RTM_EXPORT(mktime);