diff --git a/src/Ydb.Sdk/src/Value/YdbValueBuilder.cs b/src/Ydb.Sdk/src/Value/YdbValueBuilder.cs index b91b1076..7a2b8fe3 100644 --- a/src/Ydb.Sdk/src/Value/YdbValueBuilder.cs +++ b/src/Ydb.Sdk/src/Value/YdbValueBuilder.cs @@ -131,18 +131,15 @@ public static YdbValue MakeDatetime(DateTime value) MakePrimitiveType(Type.Types.PrimitiveTypeId.Datetime), new Ydb.Value { - Uint32Value = (uint)value.Subtract(DateTime.UnixEpoch).TotalSeconds + Uint32Value = (uint)((value.Ticks - DateTime.UnixEpoch.Ticks) * + Duration.NanosecondsPerTick / Duration.NanosecondsPerSecond) }); } public static YdbValue MakeTimestamp(DateTime value) { - return new YdbValue( - MakePrimitiveType(Type.Types.PrimitiveTypeId.Timestamp), - new Ydb.Value - { - Uint64Value = (ulong)(value.Subtract(DateTime.UnixEpoch).TotalMilliseconds * 1000) - }); + return new YdbValue(MakePrimitiveType(Type.Types.PrimitiveTypeId.Timestamp), new Ydb.Value + { Uint64Value = (ulong)(value.Ticks - DateTime.UnixEpoch.Ticks) * Duration.NanosecondsPerTick / 1000 }); } public static YdbValue MakeInterval(TimeSpan value) diff --git a/src/Ydb.Sdk/tests/Value/BasicsIntegrationTests.cs b/src/Ydb.Sdk/tests/Value/BasicsIntegrationTests.cs index 65d102f0..b28aafc2 100644 --- a/src/Ydb.Sdk/tests/Value/BasicsIntegrationTests.cs +++ b/src/Ydb.Sdk/tests/Value/BasicsIntegrationTests.cs @@ -94,6 +94,14 @@ public async Task PrimitiveTypes() var resultTimestamp = await SelectPassed(YdbValue.MakeTimestamp(valueTimestamp)); Assert.Equal(resultTimestamp.GetTimestamp(), valueTimestamp); + var valueTimestamp1 = DateTime.Parse("2029-08-03T06:59:44.8578730Z"); + var resultTimestamp1 = await SelectPassed(YdbValue.MakeTimestamp(valueTimestamp1)); + Assert.Equal(resultTimestamp1.GetTimestamp(), valueTimestamp1); + + var valueTimestamp2 = DateTime.Parse("2029-08-09T17:15:29.6935850Z"); + var resultTimestamp2 = await SelectPassed(YdbValue.MakeTimestamp(valueTimestamp2)); + Assert.Equal(resultTimestamp2.GetTimestamp(), valueTimestamp2); + var valueInterval = -new TimeSpan(3, 7, 40, 27, 729); var resultInterval = await SelectPassed(YdbValue.MakeInterval(valueInterval)); Assert.Equal(resultInterval.GetInterval(), valueInterval);