Le 2 righe successive aggiungono lo stesso importo alla stessa data e la parte relativa alla data dei risultati è la stessa, ma in qualche modo c'è differenza nella parte temporale!Problema AddDays .NET
(new DateTime(2000,1,3,18,0,0)).AddDays(4535);
(new DateTime(2000,1,3,18,0,0)).AddMonths(149);
si otterrà una differenza di 15 secondi, e con entrambi sono almeno roundable di giorni, non so il motivo per cui questo è accaduto, ma succede solo con AddDays, ma non AddMonths (anche con migliaia di mesi aggiunti)
Modifica 1
Così ho provato a fare un progetto di esempio, ma senza fortuna. Se eseguo il mio progetto principale e inserisco le linee di campionamento negli orologi, allora ottengo 2 valori separati, se faccio un nuovo inizio, il problema non c'è. Il progetto è 3.5, C#, vs2010, win7hp x64 (proj: x86). Sto cercando di riprodurlo anche in un nuovo piccolo progetto, scriverò di nuovo se ce l'ho.
Questi sono i miei risultati nel progetto principale (copeid dagli orologi!):
(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
sono riuscito a restringere il campo ancora di più. Abbiamo un componente autoprodotto, una base di pannelli, che disegniamo su di esso con directx. Se lo faccio visibile = falso, che visible = true, che l'errore arriva, prima di visible = true (o show()), il calcolo è corretto. Ciò che nel mondo può essere lì, che il risultato ottiene qualcos'altro di una formula in cui non viene utilizzata alcuna variabile. La cultura non è influenzato nel componente ..
Potrebbe essere un problema a causa del tipo di dati, poiché AddDays richiede un doppio. Sembra che la differenza dovrebbe essere molto meno di 15 secondi, però. Controlla http://en.wikipedia.org/wiki/Double_precision per vedere come si approssima semplicemente i valori. –
Hai provato a invertire l'ordine delle chiamate al metodo per vedere se ottieni lo stesso risultato? Probabilmente non farà la differenza, ma sono curioso. –
Non sono stato in grado di riprodurre questo (sul compilatore C# 4). Qual è il tuo ambiente? – SWeko