1

私は2つの日時ピッカーを持っており、ユーザーが日付を選択した場合、それらの間の日数をテキストボックスに表示したい..コードの問題は、正しい答えが得られず、期間が機能していないように見える..どこが間違っているのかわからないので、助けを求めました。それがよりよく説明されていることを願っています、ご容赦ください。このサイトにアクセスするのは初めてなので、コントロール、送信、更新に慣れていません。別の日付を選択すると、11日ではなく10.999998008713日と答えてくれます。数学のまとめをする必要があるかどうかを知る

 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;
4

1 に答える 1

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

実際には、コード全体を 1 行に入れることができます。

txtBoxNum.Text = new TimeSpan(DepartureDate.Value.Date.Ticks - ArrivalDate.Value.Date.Ticks).Days.ToString();
于 2013-11-04T20:49:32.243 に答える