我怎样才能占非常少量的时间?

How can I account for very small amounts of time?

这是一个奇怪的问题,但给出以下结果...

DateTime.MaxValue.Ticks; 

= 3155378975999999999

new DateTime(DateTime.MaxValue.Year,
             DateTime.MaxValue.Month, 
             DateTime.MaxValue.Day, 
             DateTime.MaxValue.Hour, 
             DateTime.MaxValue.Minute, 
             DateTime.MaxValue.Second, 
             DateTime.MaxValue.Millisecond)
       .Ticks; 

= 3155378975999990000

(是的,我知道这是可以做到的,但是...)

new DateTime(DateTime.MaxValue.Ticks);

这 9999 个刻度代表什么?我如何手动计算丢失的 9999 个刻度?例如,假设它们代表纳秒。我可以创建一个 "AddNanoseconds" 方法吗?

谢谢!

DateTime.MaxValue.Ticks 以刻度为单位,而您的最大化日期 "stops" 以毫秒为单位,因此不包括最后 9999 个刻度。

用一个简单的例子来说明这一点:

var maxTicks = DateTime.MaxValue.Ticks; 
Console.WriteLine("Max ticks:");
Console.WriteLine(maxTicks); // 3155378975999999999

var maxedDate = new DateTime(DateTime.MaxValue.Year,
                            DateTime.MaxValue.Month, 
                            DateTime.MaxValue.Day, 
                            DateTime.MaxValue.Hour, 
                            DateTime.MaxValue.Minute, 
                            DateTime.MaxValue.Second, 
                            DateTime.MaxValue.Millisecond);

var ticksFromDate = maxedDate.Ticks; 
Console.WriteLine("Max ticks from date:");
Console.WriteLine(ticksFromDate); // 3155378975999990000

var withExtraTicks = maxedDate.AddTicks(9999);
Console.WriteLine("Max date with ticks added:");
Console.WriteLine(withExtraTicks.Ticks); // 3155378975999999999

try{ 
    var tooLong = withExtraTicks.AddTicks(1); 
    Console.WriteLine("Note: This line will only be shown if run on Diskworld.");
}
catch(Exception ex){
    Console.WriteLine("Failed! Message:");
    // Will show the message:
    // "The added or subtracted value results in an un-representable DateTime."
    Console.WriteLine(ex.Message); 
}