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 2023/06/22
* 增加函数ret\_code\_from\_name/ret\_code\_to\_name。 * 增加函数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 #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; time_t tm = timeval;
struct tm* t = localtime(&tm); struct tm* t = gmtime(&tm);
return_value_if_fail(dt != NULL, RET_BAD_PARAMS); return_value_if_fail(dt != NULL, RET_BAD_PARAMS);
memset(dt, 0x00, sizeof(date_time_t)); 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; return RET_OK;
} }
static uint64_t date_time_to_time_impl(date_time_t* dt) { static int64_t date_time_to_time_impl(date_time_t* dt) {
time_t tm = 0; struct tm t;
struct tm* t = localtime(&tm); time_t tvalue = 0;
return_value_if_fail(dt != NULL, RET_BAD_PARAMS); return_value_if_fail(dt != NULL, RET_BAD_PARAMS);
t->tm_sec = dt->second; memset(&t, 0x00, sizeof(t));
t->tm_min = dt->minute; t.tm_sec = dt->second;
t->tm_hour = dt->hour; t.tm_min = dt->minute;
t->tm_mday = dt->day; t.tm_hour = dt->hour;
t->tm_mon = dt->month - 1; t.tm_mday = dt->day;
t->tm_year = dt->year - 1900; t.tm_mon = dt->month - 1;
t->tm_wday = dt->wday; 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(); uint64_t stm_now_ms();

View File

@ -57,7 +57,7 @@ date_time_t* date_time_create(void) {
return date_time_init(dt); 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(dt != NULL, RET_BAD_PARAMS);
return_value_if_fail(s_date_time_from_time != 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) { 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); return_value_if_fail(dt != NULL && s_date_time_to_time != NULL, RET_BAD_PARAMS);
t = s_date_time_to_time(dt) + delta; t = s_date_time_to_time(dt) + delta;
return s_date_time_from_time(dt, t); 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_value_if_fail(dt != NULL && s_date_time_to_time != NULL, RET_BAD_PARAMS);
return s_date_time_to_time(dt); 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 * @method date_time_from_time
* time转换而来 * time转换而来(GMT转换)
* *
* @annotation ["scriptable"] * @annotation ["scriptable"]
* @param {date_time_t*} dt date_time对象 * @param {date_time_t*} dt date_time对象
* @param {uint64_t} time * @param {int64_t} time
* *
* @return {ret_t} RET_OK表示成功 * @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 * @method date_time_to_time
* time * time(GMT转换)
* *
* @annotation ["scriptable"] * @annotation ["scriptable"]
* @param {date_time_t*} dt date_time对象 * @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 * @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_from_time(dt, now), RET_OK);
ASSERT_EQ(date_time_to_time(dt), now); 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); date_time_destroy(dt);
} }
@ -95,15 +108,16 @@ TEST(DateTime, wday) {
} }
TEST(DateTime, from_time) { TEST(DateTime, from_time) {
date_time_t dt; date_time_t* dt = date_time_create();
date_time_t now;
time_t t = time(0); ASSERT_EQ(date_time_from_time(dt, 86400), RET_OK);
date_time_init(&now); ASSERT_EQ(dt->year, 1970);
ASSERT_EQ(date_time_from_time(&dt, t), RET_OK); ASSERT_EQ(dt->month, 1);
ASSERT_EQ(dt.year, now.year); ASSERT_EQ(dt->day, 2);
ASSERT_EQ(dt.month, now.month);
ASSERT_EQ(dt.day, now.day); ASSERT_EQ(date_time_to_time(dt), 86400);
ASSERT_EQ(dt.hour, now.hour);
date_time_destroy(dt);
} }
TEST(DateTime, set_time) { TEST(DateTime, set_time) {