Skip to content

Commit

Permalink
bug: rounding down when inserting a Timestamp field (#119)
Browse files Browse the repository at this point in the history
  • Loading branch information
KirillKurdyukov committed May 30, 2024
1 parent f618770 commit 06a1667
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 7 deletions.
11 changes: 4 additions & 7 deletions src/Ydb.Sdk/src/Value/YdbValueBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
8 changes: 8 additions & 0 deletions src/Ydb.Sdk/tests/Value/BasicsIntegrationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 06a1667

Please sign in to comment.