Skip to content

Commit 9f034d6

Browse files
committed
接口方法把taos数据库对微秒级的支持强行改成了毫秒级 #132
1 parent 85fc923 commit 9f034d6

File tree

1 file changed

+37
-21
lines changed

1 file changed

+37
-21
lines changed

src/Maikebing.Data.Taos/TaosDataReader.cs

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -308,13 +308,22 @@ public virtual TimeSpan GetTimeSpan(int ordinal)
308308
{
309309
var val = Marshal.ReadInt64(GetValuePtr(ordinal));
310310
var _dateTimePrecision = (TSDB_TIME_PRECISION)TDengine.ResultPrecision(_taosResult);
311-
if (_dateTimePrecision == TSDB_TIME_PRECISION.TSDB_TIME_PRECISION_MICRO)
311+
switch (_dateTimePrecision)
312312
{
313-
return TimeSpan.FromMilliseconds(val / 1000);
314-
}
315-
else
316-
{
317-
return TimeSpan.FromMilliseconds(val);
313+
/*
314+
* ticks为100纳秒,必须乘以10才能达到微秒级的区分度
315+
* 1秒s = 1000毫秒ms
316+
* 1毫秒ms = 1000微秒us
317+
* 1微秒us = 1000纳秒ns
318+
* 因此, 1毫秒ms = 1000000纳秒ns = 10000ticks
319+
*/
320+
case TSDB_TIME_PRECISION.TSDB_TIME_PRECISION_NANO:
321+
return TimeSpan.FromTicks(val / 100);
322+
case TSDB_TIME_PRECISION.TSDB_TIME_PRECISION_MICRO:
323+
return TimeSpan.FromTicks(val * 10);
324+
case TSDB_TIME_PRECISION.TSDB_TIME_PRECISION_MILLI:
325+
default:
326+
return TimeSpan.FromTicks(val * 10000);
318327
}
319328
}
320329

@@ -627,27 +636,34 @@ public override object GetValue(int ordinal)
627636
}
628637
return result;
629638
}
630-
639+
631640
private DateTime GetDateTimeFrom(IntPtr data)
632641
{
633642
var val = Marshal.ReadInt64(data);
634-
double tsp;
643+
//double tsp;
635644
var _dateTimePrecision = (TSDB_TIME_PRECISION)TDengine.ResultPrecision(_taosResult);
636-
if (_dateTimePrecision == TSDB_TIME_PRECISION.TSDB_TIME_PRECISION_MICRO)
645+
switch (_dateTimePrecision)
637646
{
638-
tsp = (val / 1000);
639-
}
640-
else
641-
{
642-
tsp = val;
643-
}
644-
if (tsp > _date_max_1970)
645-
{
646-
//fix https://github.com/taosdata/TDengine/issues/3270
647-
tsp /= 1000;
647+
/*
648+
* ticks为100纳秒,必须乘以10才能达到微秒级的区分度
649+
* 1秒s = 1000毫秒ms
650+
* 1毫秒ms = 1000微秒us
651+
* 1微秒us = 1000纳秒ns
652+
* 因此, 1毫秒ms = 1000000纳秒ns = 10000ticks
653+
*/
654+
case TSDB_TIME_PRECISION.TSDB_TIME_PRECISION_NANO:
655+
val /= 100;
656+
break;
657+
case TSDB_TIME_PRECISION.TSDB_TIME_PRECISION_MICRO:
658+
val *= 10;
659+
break;
660+
case TSDB_TIME_PRECISION.TSDB_TIME_PRECISION_MILLI:
661+
default:
662+
val *= 10000;
663+
break;
648664
}
649-
var v9 = _dt1970.AddMilliseconds(tsp);
650-
return v9.ToLocalTime();
665+
var v9 = _dt1970.AddTicks(val);
666+
return v9.ToLocalTime();
651667
}
652668

653669
/// <summary>

0 commit comments

Comments
 (0)