使用2个日期选择器显示文本框中的天差

时间:2013-11-04 20:44:54

标签: c# winforms

我有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;

1 个答案:

答案 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();