【问题标题】:using 2 datepickers to display days difference in a textbox使用 2 个日期选择器在文本框中显示天数差异
【发布时间】:2013-11-05 05:12:07
【问题描述】:

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

【问题讨论】:

  • 我知道您是 SO 新手。只是为了让您知道,您应该更新您的original question,而不是询问新的是否是针对同一问题。您可能还想阅读How to Ask
  • TimeSpan 类是你想要的。
  • DateTime start = ArrivalDate.Value.Date;DateTime finish = DepartureDate.Value.Date; 试试这个
  • 感谢您的建议,但它的显示和回答就像 10.00:00:00 而不是 10 天,您知道这是为什么吗?
  • 这是一个时间跨度。你必须使用TotalDays.ToString() 而不是numberOfNights.ToString()

标签: c# winforms


【解决方案1】:

您只需要从日期选择器中获取日期部分:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    相关资源
    最近更新 更多