Следующие две строки добавляют одну и ту же дату к той же дате, а часть даты результатов одна и та же, но почему-то разница в части времени!. NET AddDays issue
(new DateTime(2000,1,3,18,0,0)).AddDays(4535);
(new DateTime(2000,1,3,18,0,0)).AddMonths(149);
вы получите разницу в 15 секунд, и оба по крайней мере, провести округление до нескольких дней, я не знаю, почему это случилось, но это происходит только с AddDays, но не AddMonths (даже с тысячами месяцев добавленными)
Edit 1
Так что я попытался сделать пробный проект, но не повезло. Если я запустил свой основной проект и поместил образцы строк в часы, я получу 2 отдельных значения, если я начну новый старт, проблемы там нет. Проект - 3.5, C#, vs2010, win7hp x64 (proj: x86). Я пытаюсь воспроизвести его также в новом маленьком проекте, я буду писать, если у меня есть.
Это мои результаты в главном проекте (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
Edit 2
мне удалось сузить ее еще больше. У нас есть самодельный компонент, панель, мы рисуем на нем с помощью directx. Если я сделаю видимым = false, чем visible = true, чем ошибка, то перед видимым = true (или show()) вычисление будет правильным. Что в мире может быть там, что результат получает что-то другое формулы, где не используется переменная. Культура не затрагивается в компоненте ..
Возможно, проблема связана с типом данных, поскольку AddDays занимает двойное. Похоже, разница должна быть намного меньше 15 секунд. Ознакомьтесь с http://en.wikipedia.org/wiki/Double_precision, чтобы увидеть, как он просто аппроксимирует значения. –
Вы пытались изменить порядок вызовов метода, чтобы узнать, получаете ли вы тот же результат? Вероятно, это не изменит ситуацию, но мне любопытно. –
Я не смог воспроизвести это (на компиляторе C# 4). Какая у вас среда? – SWeko