UtcMilliTime 1.0.1

dotnet add package UtcMilliTime --version 1.0.1
NuGet\Install-Package UtcMilliTime -Version 1.0.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="UtcMilliTime" Version="1.0.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add UtcMilliTime --version 1.0.1
#r "nuget: UtcMilliTime, 1.0.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install UtcMilliTime as a Cake Addin
#addin nuget:?package=UtcMilliTime&version=1.0.1

// Install UtcMilliTime as a Cake Tool
#tool nuget:?package=UtcMilliTime&version=1.0.1

Improve .NET to Unix time compatibility. UtcMilliTime is for Windows devs to get timestamps in the Unix Time Milliseconds format, from a software defined clock that syncs with NTP (network) time.

In JavaScript, there is the Date.now() function. It yields Unix time * 1000 + milliseconds, or 'UtcMilliTime' for short. That format of timestamp is our goal. As it is UTC time - not localized - it is unambiguous (not subject to adjustment for time zone or daylight saving time). As it is a whole number of milliseconds (integer), intervals (when expressed in milliseconds) can be added or subtracted to easily find the time immediately before or after the interval.

In .NET, the simple standard above becomes complicated. In common .NET projects, developers may feel it necessary to use .NET's DateTime, which counts ticks of a different precision in a different Epoch. It has been awkward to convert between these two formats as mentioned.

Now UtcMilliTime - an open source package on GitHub - brings the Time.Now idiom to .NET code running on Windows. It is open source, MIT licensed, and maintained by J.P. Kusumi (at https://github.com/JPKusumi/UtcMilliTime).

Using UtcMilliTime, you can say var timestamp = Time.Now; and, it's a whole integer of the same scale and format as Date.now() in JavaScript. This component is not just a converter. It is a software defined clock that can reach out to an NTP (Network Time Protocol) server to synchronize itself with network time. It uses the Windows kernel, so this solution is only for running on Windows.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.1 1,985 10/28/2019

For a source of timestamps, you can use UtcMilliTime.dll, a less-than-20KB library. Install the NuGet package or otherwise set a reference to the dll. Add

using UtcMilliTime;

to the top of the code file where you will use it. At class level or early in your code, say-

ITime Time = Clock.Time;

or you may prefer to use dependency injection which would allow you to mock the ITime interface. Then, in the normal course of your code, you can say:

var timestamp = Time.Now;

That will get you an Int64 (long) timestamp value expressing the whole number of milliseconds that have elapsed in the Unix Epoch since 1/1/1970 00:00:00, excluding leap seconds. Also, just once at the beginning of run time, you should use this line-

Time.SuppressNetworkCalls = false;

By default, the component would pass along device time - the time set on the local device by Windows and perhaps the user. The line above gives the clock permission to use the network, for synchronization with an NTP (Network Time Protocol) server. The clock then updates itself (asynchronously) to network time, and it leaves device time alone. Device time will be ignored for the rest of run time.

(However, if permission is not given as above, then the clock yields device time, and network time will be ignored.)

For more info, see the ReadMe at https://github.com/JPKusumi/UtcMilliTime