-4

2 つの日時ピッカーがあり、ユーザーが日付を選択した場合にテキスト ボックスにそれらの間の日数を表示したいと考えています。

私のコードの問題は、正しい答えが得られず、動作してTimeSpanいないように見えることです。

別の日付を選択すると、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)
   {
       if (DepartureDate.Value < ArrivalDate.Value)
       {
           MessageBox.Show("Cannot be less than previous date");
           DepartureDate.Value = ArrivalDate.Value.AddDays(1);
           snip...
       }
   }
4

2 に答える 2

1

数学のまとめをする必要があるかどうかわかりません

私たちもそうではありません。10.999998008713 日は約 10 日と 23 時間 59 分 59 秒です。それを11日と数えますか?もしそうなら、10日23時間59分58秒はどうですか?ある時点で、10 日と 11 日の間のカットオフを決定する必要があります。これはおそらくビジネス ルールに依存するため、それについてはわかりません。

また、あなたの値numberOfNights.Daysの日コンポーネントです。numberOfNightsしたがって、2013 年 11 月 4 日の場合は 4 になります。それでよろしいですか? は必要ありません。あなたとnumberOfNights.TotalDaysの間の経過時間は何日ですか?finishstart

于 2013-11-04T20:59:52.210 に答える
0

これはトリックをしました

          int TotalDays= numberOfNights.Days;
          txtBoxNum.Text = ((int)Math.Ceiling(numberOfNights.TotalDays)).ToString();
于 2013-11-06T03:08:58.020 に答える