public void DateTimeConversion() { UT_INIT(); Log.SetVerbosity(new ConsoleLogger(), Verbosity.Verbose, "/"); Log.MapThreadName("UnitTest"); Log.SetDomain("TickWatch", Scope.Method); Log.Info("DateTime.MinValue(): " + (DateTime.MinValue.ToString())); Log.Info("DateTime.MaxValue(): " + (DateTime.MaxValue.ToString())); Ticks ticksNow = new Ticks(); // roundtrip 1 long millisEpochNow = ticksNow.InEpochMillis(); ticksNow.SetFromEpochMillis(millisEpochNow); long ticksNowFromEpoch = ticksNow.Raw(); UT_TRUE(Math.Abs(ticksNow.Raw() - ticksNowFromEpoch) < 50000); // roundtrip 2 long millis5_1_70_3_51 = 0 + (4L * 24L * 60L * 60L * 1000L) + (3L * 60L * 60L * 1000L) + (51L * 60L * 1000L); long millis5_1_71_3_51 = millis5_1_70_3_51 + (365L * 24L * 60L * 60L * 1000L); Ticks ticks5_1_70_3_51 = new Ticks(); ticks5_1_70_3_51.SetFromEpochMillis(millis5_1_70_3_51); Ticks ticks5_1_71_3_51 = new Ticks(); ticks5_1_71_3_51.SetFromEpochMillis(millis5_1_71_3_51); UT_TRUE(ticks5_1_70_3_51.Raw() < ticks5_1_71_3_51.Raw()); long millis5_1_70_3_51_back = ticks5_1_70_3_51.InEpochMillis(); long millis5_1_71_3_51_back = ticks5_1_71_3_51.InEpochMillis(); UT_TRUE(millis5_1_70_3_51_back == millis5_1_70_3_51); UT_TRUE(millis5_1_71_3_51_back == millis5_1_71_3_51); // add 1 day, 2h, 3min and 4sec days: Ticks tomorrow = new Ticks(ticksNow); Ticks span = new Ticks(); span.FromMillis((long)(new TimeSpan(1, 2, 3, 4)).TotalMilliseconds); tomorrow.Add(span); Log.Info("Today: is: " + (DateTime.Now.ToString())); Log.Info("Today: is: " + (ticksNow.InDotNetDateTime().ToString())); Log.Info("Today: is: " + ((new Ticks(ticksNowFromEpoch)).InDotNetDateTime().ToString())); Log.Info("+1d, 2h,3m,4s: " + (tomorrow.InDotNetDateTime().ToString())); Log.Info("5.1.70 3:51:00: " + (ticks5_1_70_3_51.InDotNetDateTime().ToString())); Log.Info("5.1.71 3:51:00: " + (ticks5_1_71_3_51.InDotNetDateTime().ToString())); }