gpt4 book ai didi

c# - .NET AddDays 问题

转载 作者:可可西里 更新时间:2023-11-01 08:27:05 24 4
gpt4 key购买 nike

接下来的两行将相同的金额添加到相同的日期,结果日期部分相同,但不知何故时间部分有所不同!

(new DateTime(2000,1,3,18,0,0)).AddDays(4535);   
(new DateTime(2000,1,3,18,0,0)).AddMonths(149);

你会得到 15 秒的差异,并且两者至少可以舍入到几天,我不知道为什么会发生这种情况,但它只发生在 AddDays 上,而不是 AddMonths(即使添加了数千个月)


编辑 1

所以我尝试制作一个示例项目,但没有成功。如果我运行我的主项目,并将示例线放入 watch ,那么我会得到 2 个独立的值,如果我重新开始,问题就不存在了。该项目是 3.5,c#,vs2010,win7hp x64 (proj: x86)。我也在尝试在一个新的小项目中重现它,如果有的话我会回信。

这些是我在主要项目中的结果(来自 watch 的copeid!):

(new DateTime(2000, 1, 3, 18, 0, 0)).AddDays(4535).Ticks    
634743432153600000 long

(new DateTime(2000, 1, 3, 18, 0, 0)).AddMonths(149).Ticks
634743432000000000 long

编辑2

我设法进一步缩小了范围。我们有一个自制的组件,panel base,我们用directx在上面绘制。如果我使 visible=false 而不是 visible=true,那么错误就出现了,在 visible=true(或 show())之前,计算是正确的。世界上会有什么东西,结果得到了不使用变量的公式的其他东西。组件中的文化不受影响..

最佳答案

这里他们给出了相同的结果:

var d1 = (new DateTime(2000, 1, 3, 18, 0, 0)).AddDays(4535).Ticks;
var d2 = (new DateTime(2000, 1, 3, 18, 0, 0)).AddMonths(149).Ticks;

d1 == d2 == 634743432000000000

(Tick 是 DateTime 内部时间的“量子”。它很短。它是 one ten-millionth of a second

我要补充一点,即使是 Mono(.NET 的独立实现)也会给出相同的结果 http://ideone.com/krySY (Ideone 使用单声道)

考虑到您最近写的东西,这很容易:内存损坏。内存损坏可以做非常随机的事情。这可能是其中之一:-)

关于c# - .NET AddDays 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9702380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com