如果我编写一个简单方法返回历元时间和DateTime.UtcNow
之间的毫秒数,我会得到一个正确的答案。但是,如果我编写一个方法来返回任意日期和纪元时间之间的毫秒数,则最后三位数字始终为零。 '一些任意日期'意味着我将DateTime.Parse(“任意日期字符串”)的输出传递给方法。就像我可以做出的那样,由.Parse返回的DateTime对象不会返回所有有效数字。在任意日期和历元时间之间取得毫秒
测试方法:
static void GetMillis()
{
DateTime dUtc = DateTime.UtcNow;
DateTime epoch = new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc);
double utcmillis = (dUtc - epoch).TotalMilliseconds;
String timestamp = dUtc.ToString();
DateTime arbitrary = (DateTime.Parse(timestamp));
Console.WriteLine("Milliseconds between DateTime.UtcNow {0} \nand epoch time {1} are {2}", dUtc, epoch, utcmillis);
Console.WriteLine("Milliseconds between arbitrary date {0} \nand epoch time {1} are {2}", arbitrary, epoch, (arbitrary - epoch).TotalMilliseconds);
}
输出:
C:\src\vs\epochConverter\epochConverter\bin\Debug
{powem} [54] --> .\epochConverter.exe -debug
Milliseconds between DateTime.UtcNow 8/26/2012 11:12:31 PM
and epoch time 1/1/1970 12:00:00 AM are 1346022751385.8
Milliseconds between arbitrary date 8/26/2012 11:12:31 PM
and epoch time 1/1/1970 12:00:00 AM are 1346022751000
我不知道如果我做一些荒唐错误或此处没有理解数学。我在MSDN中进行了研究,找不到任何与此区别有关的内容。我真的希望能够按照描述计算millis - 是否有可能?
谢谢。
熔点
感谢您的详细解答。我想这个挑战是有缺陷的想法。因为我希望两个日期之间的毫秒_difference_和任何给定的日期必须可以表示为毫秒数。但是,我想,那并不是真正发生在DateTime数学上的事情。用例是将演示格式中的日期字符串转换为DateTime对象,然后进行处理。我曾看过MSDN文章“如何:在日期和时间值中显示毫秒数”,但我一直无法为我工作。 – naugiedoggie
如果用例需要你解析一个字符串,那么最后的'000'就可能没问题。这可能只是由于毫秒 - 自1970年以来在某些系统中作为日期的常见内部表示,并且与此有关。 –
考虑到它后,我相信我已经更好地理解计算日期数学时实际发生的情况。我有一个工具,它应该在_epoch时间内产生数值_但有时候会以毫秒和几秒钟的速度被喷出。这显然是一个错误,但对我来说这是一个黑盒子。所有这些问题的结局都是为了计算这些差异而制作最简单的工具。我不喜欢做我不了解他们如何工作的事情。 ;-) – naugiedoggie