improve date time

This commit is contained in:
lixianjing 2023-06-26 10:26:48 +08:00
parent 6181816d65
commit c27e55a504
5 changed files with 53 additions and 31 deletions

View File

@ -1,5 +1,10 @@
# 最新动态
2023/06/26
* 完善date\_time\_to\_time/date\_time\_from\_time
* 类型由uint64改为int64。
* 本地时间改为GMT时间。
2023/06/22
* 增加函数ret\_code\_from\_name/ret\_code\_to\_name。

View File

@ -132,9 +132,9 @@ static ret_t date_time_set_now_impl(date_time_t* dt) {
#endif
static ret_t date_time_from_time_impl(date_time_t* dt, uint64_t timeval) {
static ret_t date_time_from_time_impl(date_time_t* dt, int64_t timeval) {
time_t tm = timeval;
struct tm* t = localtime(&tm);
struct tm* t = gmtime(&tm);
return_value_if_fail(dt != NULL, RET_BAD_PARAMS);
memset(dt, 0x00, sizeof(date_time_t));
@ -150,20 +150,23 @@ static ret_t date_time_from_time_impl(date_time_t* dt, uint64_t timeval) {
return RET_OK;
}
static uint64_t date_time_to_time_impl(date_time_t* dt) {
time_t tm = 0;
struct tm* t = localtime(&tm);
static int64_t date_time_to_time_impl(date_time_t* dt) {
struct tm t;
time_t tvalue = 0;
return_value_if_fail(dt != NULL, RET_BAD_PARAMS);
t->tm_sec = dt->second;
t->tm_min = dt->minute;
t->tm_hour = dt->hour;
t->tm_mday = dt->day;
t->tm_mon = dt->month - 1;
t->tm_year = dt->year - 1900;
t->tm_wday = dt->wday;
memset(&t, 0x00, sizeof(t));
t.tm_sec = dt->second;
t.tm_min = dt->minute;
t.tm_hour = dt->hour;
t.tm_mday = dt->day;
t.tm_mon = dt->month - 1;
t.tm_year = dt->year - 1900;
t.tm_wday = dt->wday;
return (uint64_t)mktime(t);
tvalue = timegm(&t);
return tvalue;
}
uint64_t stm_now_ms();

View File

@ -57,7 +57,7 @@ date_time_t* date_time_create(void) {
return date_time_init(dt);
}
ret_t date_time_from_time(date_time_t* dt, uint64_t time) {
ret_t date_time_from_time(date_time_t* dt, int64_t time) {
return_value_if_fail(dt != NULL, RET_BAD_PARAMS);
return_value_if_fail(s_date_time_from_time != NULL, RET_BAD_PARAMS);
@ -154,14 +154,14 @@ const char* date_time_get_wday_name(uint32_t wday) {
}
ret_t date_time_add_delta(date_time_t* dt, int64_t delta) {
uint64_t t = 0;
int64_t t = 0;
return_value_if_fail(dt != NULL && s_date_time_to_time != NULL, RET_BAD_PARAMS);
t = s_date_time_to_time(dt) + delta;
return s_date_time_from_time(dt, t);
}
uint64_t date_time_to_time(date_time_t* dt) {
int64_t date_time_to_time(date_time_t* dt) {
return_value_if_fail(dt != NULL && s_date_time_to_time != NULL, RET_BAD_PARAMS);
return s_date_time_to_time(dt);

View File

@ -182,26 +182,26 @@ ret_t date_time_set(date_time_t* dt);
/**
* @method date_time_from_time
* time转换而来
* time转换而来(GMT转换)
*
* @annotation ["scriptable"]
* @param {date_time_t*} dt date_time对象
* @param {uint64_t} time
* @param {int64_t} time
*
* @return {ret_t} RET_OK表示成功
*/
ret_t date_time_from_time(date_time_t* dt, uint64_t time);
ret_t date_time_from_time(date_time_t* dt, int64_t time);
/**
* @method date_time_to_time
* time
* time(GMT转换)
*
* @annotation ["scriptable"]
* @param {date_time_t*} dt date_time对象
*
* @return {uint64_t} time
* @return {int64_t} time
*/
uint64_t date_time_to_time(date_time_t* dt);
int64_t date_time_to_time(date_time_t* dt);
/**
* @method date_time_add_delta

View File

@ -9,6 +9,19 @@ TEST(DateTime, convert) {
ASSERT_EQ(date_time_from_time(dt, now), RET_OK);
ASSERT_EQ(date_time_to_time(dt), now);
memset(dt, 0x00, sizeof(*dt));
dt->year = 1970;
dt->month = 1;
dt->day = 1;
ASSERT_EQ(date_time_to_time(dt), 0);
ASSERT_EQ(date_time_from_time(dt, 0), RET_OK);
ASSERT_EQ(dt->year, 1970);
ASSERT_EQ(dt->month, 1);
ASSERT_EQ(dt->day, 1);
date_time_destroy(dt);
}
@ -95,15 +108,16 @@ TEST(DateTime, wday) {
}
TEST(DateTime, from_time) {
date_time_t dt;
date_time_t now;
time_t t = time(0);
date_time_init(&now);
ASSERT_EQ(date_time_from_time(&dt, t), RET_OK);
ASSERT_EQ(dt.year, now.year);
ASSERT_EQ(dt.month, now.month);
ASSERT_EQ(dt.day, now.day);
ASSERT_EQ(dt.hour, now.hour);
date_time_t* dt = date_time_create();
ASSERT_EQ(date_time_from_time(dt, 86400), RET_OK);
ASSERT_EQ(dt->year, 1970);
ASSERT_EQ(dt->month, 1);
ASSERT_EQ(dt->day, 2);
ASSERT_EQ(date_time_to_time(dt), 86400);
date_time_destroy(dt);
}
TEST(DateTime, set_time) {