我有2个日期时间选择器,如果用户选择日期,我想在文本框中显示它们之间的天数..我的代码的问题是它没有给我正确的答案,时间跨度似乎没有工作..我不知道我哪里出错那就是为什么我要求帮助。 我希望更好地解释,请耐心等待,这是我第一次来到这个网站,所以我不熟悉控件,发送内容和更新 当我选择不同的日期时,它给我回答10.999998008713天而不是11天我不知道我是否需要做数学综合
private void btnCalc_Click(object sender, EventArgs e)
{
DateTime start = ArrivalDate.Value;
DateTime finish = DepartureDate.Value;
TimeSpan numberOfNights = finish-start;
double TotalDays= numberOfNights.Days;
txtBoxNum.Text = (numberOfNights.ToString());
}
private void ArrivalDate_ValueChanged(object sender, EventArgs e)
{
DepartureDate.Value = ArrivalDate.Value.AddDays(1);
}
private void DepartureDate_ValueChanged(object sender, EventArgs e)
{
// setting messagebox to a sensible default message if no date or wrong date picked
if (DepartureDate.Value < ArrivalDate.Value)
{
MessageBox.Show("Cannot be less than previous date");
DepartureDate.Value = ArrivalDate.Value.AddDays(1);
}
else
{
double Days = (DepartureDate.Value - ArrivalDate.Value).TotalDays;
txtBoxNum.Text = Days.ToString();
return;
答案 0 :(得分:2)
您只需要从日期选择器中获取日期部分:
DateTime start = ArrivalDate.Value.Date;
DateTime finish = DepartureDate.Value.Date;
否则你也会有时间干扰你的计算。
另外,要将天数显示为整数,请使用:
int TotalDays = numberOfNights.Days; // Days is int anyway
txtBoxNum.Text = TotalDays.ToString();
或者只是
txtBoxNum.Text = numberOfNights.Days.ToString();
您实际上可以将整个代码放在一行中:
txtBoxNum.Text = new TimeSpan(DepartureDate.Value.Date.Ticks - ArrivalDate.Value.Date.Ticks).Days.ToString();