المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : Weird behaviour by DateTime.Substract



C# Programming
12-01-2009, 08:51 PM
Hello, I do not know why it is happening, but sometimes DateTime.Substract returns either 0 or 1, while parameter have same values

public bool bCodeChange1; // Used to stop double check of NumericUpDown
public bool bCodeChange2; // Used to stop Double check for DateTimePicker

///
/// Sets DateTime to have Time At: 00:00:00:00 (HH:MM:SS:mil)
///
///
///
private DateTime RemoveTime(DateTime time)
{
time = time.AddHours(-time.Hour);
time = time.AddMilliseconds(-time.Millisecond);
time = time.AddMinutes(-time.Minute);
time = time.AddSeconds(-time.Second);
return time;
}

private void dateTimePickerDateDeadLine_ValueChanged(object sender, EventArgs e)
{
DateTime dtDateDeadLine = dateTimePickerDateDeadLine.Value;
DateTime dtDateReciet = dateTimePickerDateReciet.Value;
dtDateDeadLine = RemoveTime(dtDateDeadLine );
dtDateReciet = RemoveTime(dtDateReciet );

if (dtDateRecit >= dtDateDeadLine )
{
MessageBox.Show("DeadLine need to be at least one day ahead of Reciet", "Ra?un", MessageBoxButtons.OK);
dateTimePickerDateDeadLine.Value = dtDateReciet.AddDays(1);
return;
}

if (bCodeChange2)
{
bCodeChange2 = false;
return;
}
bCodeChange1 = true;

// Here lies the problem
// dtDateDeadLine: {30.11.2009 0:00:00}
// dtDateReciet: {1.12.2009 0:00:00}

// All works whell, unless i select at date, with same dates.
// In Both cases (Normaly and not Normaly) below line, gets the same values(As Above), but sometimes it gives 2 or 1.
// It gives a One in normal whay, however it will return true if this statemnt executes: 'if (dtDateRecit >= dtDateDeadLine )'
numericUpDownDaysTillDeadLine.Value = dtDateDeadLine.Subtract(dtDateReciet).Days + 1;
}

private void numericUpDownDaysTillDeadLine_ValueChanged(object sender, EventArgs e)
{
if (bCodeChange1)
{
bCodeChange1 = false;
return;
}
bCodeChange2 = true;
numericUpDownDaysTillDeadLine.Value = dateTimePickerDateReciet.Value.AddDays(Convert.ToDouble(numericUpDownDaysTillDeadLine.Value));
}

I am so puzzled. Thanks goes in Advance.

PS: If variables names missmatches, you do not need to point out, because i nearly translated variable names, so that you can understand.