From 6e66b74b382ecb527b2ca3bdde4e147deda60d0a Mon Sep 17 00:00:00 2001 From: t_max <1172915550@qq.com> Date: Thu, 23 Mar 2023 14:00:48 +0800 Subject: [PATCH] fix: fix check timestamp data --- tests/pytest/util/sql.py | 52 +++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/tests/pytest/util/sql.py b/tests/pytest/util/sql.py index aa6fb2bbc1..5ba96de24c 100644 --- a/tests/pytest/util/sql.py +++ b/tests/pytest/util/sql.py @@ -24,26 +24,12 @@ from util.log import * from util.constant import * # from datetime import timezone -from tzlocal import get_localzone -import pytz import time -def _locaTzTimeStamp(utctimestamp): - tz = get_localzone() - temptz = str(tz) - localtz = pytz.timezone(temptz) - defUtctimestamp=1035640800 - local_dt = datetime.datetime(2002, 10, 27, 6, 0, 0, tzinfo=localtz) - defLocaltimestamp = time.mktime(local_dt.timetuple()) - deltaTzTime = int(defLocaltimestamp)-int(defUtctimestamp) - temp = int(str(utctimestamp)[0:10]) - tempOther = str(utctimestamp)[10-len(str(utctimestamp)):] - localtemp = deltaTzTime + temp - localAll = str(localtemp) + str(tempOther) - localtimestamp = int(localAll) - - print(f"local timezone is {localtimestamp}, Deltel time is {deltaTzTime}s") - return localtimestamp +def _parse_ns_timestamp(timestr): + dt_obj = datetime.datetime.strptime(timestr[:len(timestr)-3], "%Y-%m-%d %H:%M:%S.%f") + tz = int(int((dt_obj-datetime.datetime.fromtimestamp(0,dt_obj.tzinfo)).total_seconds())*1e9) + int(dt_obj.microsecond * 1000) + int(timestr[-3:]) + return tz def _parse_datetime(timestr): @@ -268,8 +254,7 @@ class TDSql: # suppose user want to check nanosecond timestamp if a longer data passed`` if isinstance(data,str) : if (len(data) >= 28): - resultData = _locaTzTimeStamp(self.queryResult[row][col]) - if pd.to_datetime(resultData) == pd.to_datetime(data): + if self.queryResult[row][col] == _parse_ns_timestamp(data): # tdLog.info(f"sql:{self.sql}, row:{row} col:{col} data:{pd.to_datetime(resultData)} == expect:{data}") tdLog.info("check successfully") else: @@ -277,7 +262,7 @@ class TDSql: args = (caller.filename, caller.lineno, self.sql, row, col, self.queryResult[row][col], data) tdLog.exit("%s(%d) failed: sql:%s row:%d col:%d data:%s != expect:%s" % args) else: - if self.queryResult[row][col] == _parse_datetime(data): + if self.queryResult[row][col].astimezone(datetime.timezone.utc) == _parse_datetime(data).astimezone(datetime.timezone.utc): # tdLog.info(f"sql:{self.sql}, row:{row} col:{col} data:{self.queryResult[row][col]} == expect:{data}") tdLog.info("check successfully") else: @@ -287,18 +272,31 @@ class TDSql: return elif isinstance(data,int) : if len(str(data)) == 16 : - unitTime = 'us' + precision = 'us' elif len(str(data)) == 13 : - unitTime = 'ms' + precision = 'ms' elif len(str(data)) == 19 : - unitTime = 'ns' + precision = 'ns' else: caller = inspect.getframeinfo(inspect.stack()[1][0]) args = (caller.filename, caller.lineno, self.sql, row, col, self.queryResult[row][col], data) tdLog.exit("%s(%d) failed: sql:%s row:%d col:%d data:%s != expect:%s" % args) - resultData = pd.to_datetime(_locaTzTimeStamp(data),unit=unitTime) - if resultData == self.queryResult[row][col] : - # tdLog.info(f"sql:{self.sql}, row:{row} col:{col} data:{self.queryResult[row][col]} == expect:{resultData}") + return + success = False + if precision == 'ms': + dt_obj = self.queryResult[row][col] + tz = int(int((dt_obj-datetime.datetime.fromtimestamp(0,dt_obj.tzinfo)).total_seconds())*1000) + int(dt_obj.microsecond/1000) + if tz == data: + success = True + elif precision == 'us': + dt_obj = self.queryResult[row][col] + tz = int(int((dt_obj-datetime.datetime.fromtimestamp(0,dt_obj.tzinfo)).total_seconds())*1e6) + int(dt_obj.microsecond) + if tz == data: + success = True + elif precision == 'ns': + if data == self.queryResult[row][col]: + success = True + if success: tdLog.info("check successfully") else: caller = inspect.getframeinfo(inspect.stack()[1][0])