diff --git a/hgdriver/wrapper/hg_log.cpp b/hgdriver/wrapper/hg_log.cpp index 5883d1f..8e388c1 100644 --- a/hgdriver/wrapper/hg_log.cpp +++ b/hgdriver/wrapper/hg_log.cpp @@ -372,11 +372,9 @@ extern "C" } std::string current_time(void) { - char buf[40]; - time_t t = time(NULL); - tm* l = localtime(&t); + char buf[40] = { 0 }; - sprintf(buf, "%d-%02d-%02d %02d:%02d:%02d", l->tm_year + 1900, l->tm_mon + 1, l->tm_mday, l->tm_hour, l->tm_min, l->tm_sec); + get_current_time(buf); return buf; } diff --git a/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp b/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp index 51d8412..d29a4a9 100644 --- a/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp +++ b/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp @@ -382,6 +382,48 @@ extern "C" return g_unk_statu; } + + void get_current_time(char* tmbuf, struct tm* t) + { +#if defined(WIN32) || defined(_WIN64) + static long bias = -1; + static bool as_start = true; + + if (bias == -1) + { + _get_timezone(&bias); + as_start = hg_log::ini_get("time", "adjust") != "no"; + } +#endif + + time_t now = time(nullptr); + struct tm* l = localtime(&now); + +#if defined(WIN32) || defined(_WIN64) + long after = 0; + if (as_start && _get_timezone(&after) == 0 && + after != bias) + { + now += bias; + l = localtime(&now); + } +#endif + + if (t) + *t = *l; + if (tmbuf) + sprintf(tmbuf, "%04d-%02d-%02d %02d:%02d:%02d", l->tm_year + 1900, l->tm_mon + 1, l->tm_mday, l->tm_hour, l->tm_min, l->tm_sec); + } + void get_current_time_w(wchar_t* tmbuf, struct tm* t) + { + struct tm tmp = { 0 }, * l = &tmp; + + get_current_time(nullptr, l); + if (t) + *t = *l; + if (tmbuf) + swprintf(tmbuf, L"%04d-%02d-%02d %02d:%02d:%02d", l->tm_year + 1900, l->tm_mon + 1, l->tm_mday, l->tm_hour, l->tm_min, l->tm_sec); + } } diff --git a/sdk/hginclude/huagaoxxx_warraper_ex.h b/sdk/hginclude/huagaoxxx_warraper_ex.h index 3cd561d..a68dd6d 100644 --- a/sdk/hginclude/huagaoxxx_warraper_ex.h +++ b/sdk/hginclude/huagaoxxx_warraper_ex.h @@ -453,6 +453,16 @@ extern "C"{ // Function: 图像状态名称 const char* hg_scanner_image_statu_name(int img_statu); + // Function: 获取当前时间字符串 + // + // Parameters: tmbuf - 用于接收时间字符串,不小于40个字符长度 + // + // t - 用于接收原始的时间结构 + // + // Return: void + void get_current_time(char* tmbuf, struct tm* t = nullptr); + void get_current_time_w(wchar_t* tmbuf, struct tm* t = nullptr); + #ifdef __cplusplus } #endif