using System.Diagnostics;
public static class Program
public static void Main(string[] args)
var clock = new StartupClock();
var utcNow = clock.UtcNow;
Console.WriteLine("{0:yyyy/MM/dd HH:mm:ss.fffff}", utcNow);
public sealed class StartupClock
if (Interlocked.CompareExchange(ref StartupUtcTicks, DateTime.UtcNow.Ticks, 0) != 0)
throw new InvalidOperationException("Start has been executed");
Stopwatch = Stopwatch.StartNew();
var ticks = Interlocked.Read(ref StartupUtcTicks);
throw new InvalidOperationException("Require start called");
return new DateTime(Stopwatch.ElapsedTicks + ticks, DateTimeKind.Utc);
public DateTime LocalNow => UtcNow.ToLocalTime();