Skip to content

Commit

Permalink
fix: DateTime/Timetoken conversion precision loss (#211)
Browse files Browse the repository at this point in the history
* Fix innacurate DateTime to Unix nanoseconds conversion

* Improve DateTime/Unix conversion unit tests + add new one

* PubNub SDK v6.19.6.0 release.

---------

Co-authored-by: PubNub Release Bot <[email protected]>
  • Loading branch information
jakub-grzesiowski and pubnub-release-bot authored Mar 28, 2024
1 parent 43a3e47 commit 4b04b78
Show file tree
Hide file tree
Showing 9 changed files with 40 additions and 21 deletions.
19 changes: 12 additions & 7 deletions .pubnub.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
name: c-sharp
version: "6.19.5"
version: "6.19.6"
schema: 1
scm: github.com/pubnub/c-sharp
changelog:
- date: 2024-03-28
version: v6.19.6
changes:
- type: bug
text: "Fixes issue of inaccurate DateTime to TimeToken conversion in TranslateDateTimeToPubnubUnixNanoSeconds."
- date: 2024-01-17
version: v6.19.5
changes:
Expand Down Expand Up @@ -766,7 +771,7 @@ features:
- QUERY-PARAM
supported-platforms:
-
version: Pubnub 'C#' 6.19.5
version: Pubnub 'C#' 6.19.6
platforms:
- Windows 10 and up
- Windows Server 2008 and up
Expand All @@ -776,7 +781,7 @@ supported-platforms:
- .Net Framework 4.5
- .Net Framework 4.6.1+
-
version: PubnubPCL 'C#' 6.19.5
version: PubnubPCL 'C#' 6.19.6
platforms:
- Xamarin.Android
- Xamarin.iOS
Expand All @@ -796,7 +801,7 @@ supported-platforms:
- .Net Core
- .Net 6.0
-
version: PubnubUWP 'C#' 6.19.5
version: PubnubUWP 'C#' 6.19.6
platforms:
- Windows Phone 10
- Universal Windows Apps
Expand All @@ -820,7 +825,7 @@ sdks:
distribution-type: source
distribution-repository: GitHub
package-name: Pubnub
location: https://github.com/pubnub/c-sharp/releases/tag/v6.19.5.0
location: https://github.com/pubnub/c-sharp/releases/tag/v6.19.6.0
requires:
-
name: ".Net"
Expand Down Expand Up @@ -1103,7 +1108,7 @@ sdks:
distribution-type: source
distribution-repository: GitHub
package-name: PubNubPCL
location: https://github.com/pubnub/c-sharp/releases/tag/v6.19.5.0
location: https://github.com/pubnub/c-sharp/releases/tag/v6.19.6.0
requires:
-
name: ".Net Core"
Expand Down Expand Up @@ -1462,7 +1467,7 @@ sdks:
distribution-type: source
distribution-repository: GitHub
package-name: PubnubUWP
location: https://github.com/pubnub/c-sharp/releases/tag/v6.19.5.0
location: https://github.com/pubnub/c-sharp/releases/tag/v6.19.6.0
requires:
-
name: "Universal Windows Platform Development"
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
v6.19.6 - March 28 2024
-----------------------------
- Fixed: fixes issue of inaccurate DateTime to TimeToken conversion in TranslateDateTimeToPubnubUnixNanoSeconds.

v6.19.5 - January 17 2024
-----------------------------
- Fixed: fixes issue of getting exception for custom objects in subscription and history when crypto module is configured.
Expand Down
2 changes: 1 addition & 1 deletion src/Api/PubnubApi/EndPoint/OtherOperation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ public static long TranslateDateTimeToSeconds(DateTime dotNetUTCDateTime)
public static long TranslateDateTimeToPubnubUnixNanoSeconds(DateTime dotNetUTCDateTime)
{
TimeSpan timeSpan = dotNetUTCDateTime - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
long timeStamp = Convert.ToInt64(timeSpan.TotalSeconds) * 10000000;
long timeStamp = Convert.ToInt64(timeSpan.TotalSeconds * 10000000);
return timeStamp;
}

Expand Down
4 changes: 2 additions & 2 deletions src/Api/PubnubApi/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
[assembly: AssemblyProduct("Pubnub C# SDK")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyVersion("6.19.5.0")]
[assembly: AssemblyFileVersion("6.19.5.0")]
[assembly: AssemblyVersion("6.19.6.0")]
[assembly: AssemblyFileVersion("6.19.6.0")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
Expand Down
4 changes: 2 additions & 2 deletions src/Api/PubnubApi/PubnubApi.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@

<PropertyGroup>
<PackageId>Pubnub</PackageId>
<PackageVersion>6.19.5.0</PackageVersion>
<PackageVersion>6.19.6.0</PackageVersion>
<Title>PubNub C# .NET - Web Data Push API</Title>
<Authors>Pandu Masabathula</Authors>
<Owners>PubNub</Owners>
<PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
<PackageIconUrl>http://pubnub.s3.amazonaws.com/2011/powered-by-pubnub/pubnub-icon-600x600.png</PackageIconUrl>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<RepositoryUrl>https://github.com/pubnub/c-sharp/</RepositoryUrl>
<PackageReleaseNotes>Fixes issue of getting exception for custom objects in subscription and history when crypto module is configured.</PackageReleaseNotes>
<PackageReleaseNotes>Fixes issue of inaccurate DateTime to TimeToken conversion in TranslateDateTimeToPubnubUnixNanoSeconds.</PackageReleaseNotes>
<PackageTags>Web Data Push Real-time Notifications ESB Message Broadcasting Distributed Computing</PackageTags>
<!--<Summary>PubNub is a Massively Scalable Web Push Service for Web and Mobile Games. This is a cloud-based service for broadcasting messages to thousands of web and mobile clients simultaneously</Summary>-->
<Description>PubNub is a Massively Scalable Web Push Service for Web and Mobile Games. This is a cloud-based service for broadcasting messages to thousands of web and mobile clients simultaneously</Description>
Expand Down
4 changes: 2 additions & 2 deletions src/Api/PubnubApiPCL/PubnubApiPCL.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@

<PropertyGroup>
<PackageId>PubnubPCL</PackageId>
<PackageVersion>6.19.5.0</PackageVersion>
<PackageVersion>6.19.6.0</PackageVersion>
<Title>PubNub C# .NET - Web Data Push API</Title>
<Authors>Pandu Masabathula</Authors>
<Owners>PubNub</Owners>
<PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
<PackageIconUrl>http://pubnub.s3.amazonaws.com/2011/powered-by-pubnub/pubnub-icon-600x600.png</PackageIconUrl>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<RepositoryUrl>https://github.com/pubnub/c-sharp/</RepositoryUrl>
<PackageReleaseNotes>Fixes issue of getting exception for custom objects in subscription and history when crypto module is configured.</PackageReleaseNotes>
<PackageReleaseNotes>Fixes issue of inaccurate DateTime to TimeToken conversion in TranslateDateTimeToPubnubUnixNanoSeconds.</PackageReleaseNotes>
<PackageTags>Web Data Push Real-time Notifications ESB Message Broadcasting Distributed Computing</PackageTags>
<!--<Summary>PubNub is a Massively Scalable Web Push Service for Web and Mobile Games. This is a cloud-based service for broadcasting messages to thousands of web and mobile clients simultaneously</Summary>-->
<Description>PubNub is a Massively Scalable Web Push Service for Web and Mobile Games. This is a cloud-based service for broadcasting messages to thousands of web and mobile clients simultaneously</Description>
Expand Down
4 changes: 2 additions & 2 deletions src/Api/PubnubApiUWP/PubnubApiUWP.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@

<PropertyGroup>
<PackageId>PubnubUWP</PackageId>
<PackageVersion>6.19.5.0</PackageVersion>
<PackageVersion>6.19.6.0</PackageVersion>
<Title>PubNub C# .NET - Web Data Push API</Title>
<Authors>Pandu Masabathula</Authors>
<Owners>PubNub</Owners>
<PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
<PackageIconUrl>http://pubnub.s3.amazonaws.com/2011/powered-by-pubnub/pubnub-icon-600x600.png</PackageIconUrl>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<RepositoryUrl>https://github.com/pubnub/c-sharp/</RepositoryUrl>
<PackageReleaseNotes>Fixes issue of getting exception for custom objects in subscription and history when crypto module is configured.</PackageReleaseNotes>
<PackageReleaseNotes>Fixes issue of inaccurate DateTime to TimeToken conversion in TranslateDateTimeToPubnubUnixNanoSeconds.</PackageReleaseNotes>
<PackageTags>Web Data Push Real-time Notifications ESB Message Broadcasting Distributed Computing</PackageTags>
<!--<Summary>PubNub is a Massively Scalable Web Push Service for Web and Mobile Games. This is a cloud-based service for broadcasting messages to thousands of web and mobile clients simultaneously</Summary>-->
<Description>PubNub is a Massively Scalable Web Push Service for Web and Mobile Games. This is a cloud-based service for broadcasting messages to thousands of web and mobile clients simultaneously</Description>
Expand Down
2 changes: 1 addition & 1 deletion src/Api/PubnubApiUnity/PubnubApiUnity.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

<PropertyGroup>
<PackageId>PubnubApiUnity</PackageId>
<PackageVersion>6.19.5.0</PackageVersion>
<PackageVersion>6.19.6.0</PackageVersion>
<Title>PubNub C# .NET - Web Data Push API</Title>
<Authors>Pandu Masabathula</Authors>
<Owners>PubNub</Owners>
Expand Down
18 changes: 14 additions & 4 deletions src/UnitTests/PubnubApi.Tests/WhenGetRequestServerTime.cs
Original file line number Diff line number Diff line change
Expand Up @@ -285,17 +285,27 @@ public static void ThenWithProxyItShouldReturnTimeStampWithSSL()
public static void TranslateDateTimeToUnixTime()
{
//Test for 26th June 2012 GMT
DateTime dt = new DateTime(2012, 6, 26, 0, 0, 0, DateTimeKind.Utc);
DateTime dt = new DateTime(2012, 6, 26, 21, 37, 13, 37, DateTimeKind.Utc);
long nanoSecondTime = Pubnub.TranslateDateTimeToPubnubUnixNanoSeconds(dt);
Assert.True(13406688000000000 == nanoSecondTime);
Assert.True(13407466330370000 == nanoSecondTime);
}

[Test]
public static void TranslateDateTimeToUnixTimeAndBack()
{
//Test for 26th June 2012 GMT
DateTime expectedDate = new DateTime(2012, 6, 26, 21, 37, 13, 37, DateTimeKind.Utc);
long nanoSecondTime = Pubnub.TranslateDateTimeToPubnubUnixNanoSeconds(expectedDate);
DateTime dateAgain = Pubnub.TranslatePubnubUnixNanoSecondsToDateTime(nanoSecondTime);
Assert.True(expectedDate.Equals(dateAgain));
}

[Test]
public static void TranslateUnixTimeToDateTime()
{
//Test for 26th June 2012 GMT
DateTime expectedDate = new DateTime(2012, 6, 26, 0, 0, 0, DateTimeKind.Utc);
DateTime actualDate = Pubnub.TranslatePubnubUnixNanoSecondsToDateTime(13406688000000000);
DateTime expectedDate = new DateTime(2012, 6, 26, 21, 37, 13, 37, DateTimeKind.Utc);
DateTime actualDate = Pubnub.TranslatePubnubUnixNanoSecondsToDateTime(13407466330370000);
Assert.True(expectedDate == actualDate);
}

Expand Down

0 comments on commit 4b04b78

Please sign in to comment.