From 7ab7bb94baec92f0031fdefa8146ceb6cb449d39 Mon Sep 17 00:00:00 2001 From: afwerar <1296468573@qq.com> Date: Tue, 21 Dec 2021 01:08:56 +0800 Subject: [PATCH] [TS-819]: windows negative timestamp error. --- src/kit/shell/src/shellEngine.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/kit/shell/src/shellEngine.c b/src/kit/shell/src/shellEngine.c index 26dc24bd1a..b5728bee2d 100644 --- a/src/kit/shell/src/shellEngine.c +++ b/src/kit/shell/src/shellEngine.c @@ -455,7 +455,28 @@ static char* formatTimestamp(char* buf, int64_t val, int precision) { */ #ifdef WINDOWS - if (tt < 0) tt = 0; + if (tt < 0) { + SYSTEMTIME a={1970,1,5,1,0,0,0,0}; // support 1601-01-01 00:00:00 + FILETIME b; // unit is 100ns + ULARGE_INTEGER c; + SystemTimeToFileTime(&a,&b); + c.LowPart = b.dwLowDateTime; + c.HighPart = b.dwHighDateTime; + c.QuadPart+=tt*10000000; + b.dwLowDateTime=c.LowPart; + b.dwHighDateTime=c.HighPart; + FileTimeToLocalFileTime(&b,&b); + FileTimeToSystemTime(&b,&a); + int pos = sprintf(buf,"%02d-%02d-%02d %02d:%02d:%02d", a.wYear, a.wMonth,a.wDay, a.wHour, a.wMinute, a.wSecond); + if (precision == TSDB_TIME_PRECISION_NANO) { + sprintf(buf + pos, ".%09d", ms); + } else if (precision == TSDB_TIME_PRECISION_MICRO) { + sprintf(buf + pos, ".%06d", ms); + } else { + sprintf(buf + pos, ".%03d", ms); + } + return buf; + } #endif if (tt <= 0 && ms < 0) { tt--; -- GitLab