@@ -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