Skip to content

Commit 70da585

Browse files
committed
Fix Mono rounding error on DateTime conversion. Issue #44
1 parent 0d4c137 commit 70da585

File tree

2 files changed

+4
-4
lines changed

2 files changed

+4
-4
lines changed

src/MsgPack/MessagePackConvert.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public static string DecodeStringStrict( byte[] value )
111111
/// </returns>
112112
public static DateTimeOffset ToDateTimeOffset( long value )
113113
{
114-
return _unixEpocUtc.AddMilliseconds( value );
114+
return _unixEpocUtc.AddTicks( value * _ticksToMilliseconds );
115115
}
116116

117117
/// <summary>
@@ -125,7 +125,7 @@ public static DateTimeOffset ToDateTimeOffset( long value )
125125
/// </returns>
126126
public static DateTime ToDateTime( long value )
127127
{
128-
return _unixEpocUtc.AddMilliseconds( value );
128+
return _unixEpocUtc.AddTicks( value * _ticksToMilliseconds );
129129
}
130130

131131
/// <summary>

test/MsgPack.UnitTest/MessagePackConvertTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ private static void AssertIsUnixEpocDateTimeOffset( DateTimeOffset actual, long
109109
{
110110
Assert.That( actual.Offset, Is.EqualTo( TimeSpan.Zero ) );
111111
var epoc = new DateTimeOffset( 1970, 1, 1, 0, 0, 0, TimeSpan.Zero );
112-
Assert.That( actual, Is.EqualTo( epoc.AddMilliseconds( millisecondsOffset ) ) );
112+
Assert.That( actual, Is.EqualTo( new DateTimeOffset( epoc.Ticks + millisecondsOffset * TicksToMilliseconds, TimeSpan.Zero ) ) );
113113
}
114114

115115

@@ -214,7 +214,7 @@ private static void AssertIsUnixEpocDateTime( DateTime actual, long milliseconds
214214
{
215215
Assert.That( actual.Kind, Is.EqualTo( DateTimeKind.Utc ) );
216216
var epoc = new DateTime( 1970, 1, 1, 0, 0, 0, DateTimeKind.Utc );
217-
Assert.That( actual, Is.EqualTo( epoc.AddMilliseconds( millisecondsOffset ) ) );
217+
Assert.That( actual, Is.EqualTo( new DateTime( epoc.Ticks + millisecondsOffset * TicksToMilliseconds, DateTimeKind.Utc ) ) );
218218
}
219219

220220
private static void AssertIsUnixEpocDateTime( DateTime expected, DateTime actual )

0 commit comments

Comments
 (0)