summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2021-05-01 10:58:24 +0800
committerGitHub <[email protected]>2021-05-01 10:58:24 +0800
commitbe3b5a950f8b0610b7f454769c2d5bf4a54afc8a (patch)
tree0f3efbca3e6033f0c085453748a6437d8c2ee03a
parentbeb2f046c41af176076c4fbda68291c426075068 (diff)
parenta611a6686402bd074cbaf53c53356c381ab54a5f (diff)
Merge pull request #4653 from mysterywolf/fixed-timezone
[libc][time]增加手动设置固定时区的功能
-rw-r--r--components/libc/Kconfig8
-rw-r--r--components/libc/compilers/common/time.c14
2 files changed, 13 insertions, 9 deletions
diff --git a/components/libc/Kconfig b/components/libc/Kconfig
index 49b97481d1..8a790c298d 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 72542867d2..deda18a560 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 <rtdbg.h>
+#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);