Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用2个日期选择器在文本框中显示日差_C#_Winforms - Fatal编程技术网

C# 使用2个日期选择器在文本框中显示日差

C# 使用2个日期选择器在文本框中显示日差,c#,winforms,C#,Winforms,我有两个日期时间选择器,如果用户选择日期,我想在文本框中显示它们之间的天数。。我的代码的问题是它没有给我正确的答案,而且时间跨度似乎不起作用。。我不知道我哪里出了问题,这就是我请求帮助的原因。 我希望这解释得更好,请容忍我,这是我第一次到这个网站,所以我不熟悉的控制,发送的东西和更新 当我选择不同的日期时,答案是10.99998008713天而不是11天,我不知道是否需要做数学总结 private void btnCalc_Click(object sender, EventArgs e)

我有两个日期时间选择器,如果用户选择日期,我想在文本框中显示它们之间的天数。。我的代码的问题是它没有给我正确的答案,而且时间跨度似乎不起作用。。我不知道我哪里出了问题,这就是我请求帮助的原因。 我希望这解释得更好,请容忍我,这是我第一次到这个网站,所以我不熟悉的控制,发送的东西和更新 当我选择不同的日期时,答案是10.99998008713天而不是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;
private void btnCalc\u单击(对象发送者,事件参数e)
{        
DateTime start=ArrivalDate.Value;
DateTime finish=DepartureDate.Value;
TimeSpan numberOfNights=完成-开始;
double TotalDays=夜数。天;
Text=(numberOfNights.ToString());
}
private void ArrivalDate_值已更改(对象发送方,事件参数e)
{
出发日期.Value=ArrivalDate.Value.AddDays(1);
}
私有void DepartureDate\u值已更改(对象发送方,事件参数e)
{
//如果未选择日期或日期错误,则将messagebox设置为合理的默认消息
if(出发日期值<到达日期值)
{
MessageBox.Show(“不能少于以前的日期”);
出发日期.Value=ArrivalDate.Value.AddDays(1);
}
其他的
{
双倍天数=(DepartureDate.Value-ArrivalDate.Value)。总天数;
txtBoxNum.Text=Days.ToString();
返回;

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

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

我知道你是新来的。只是想让你知道,你应该更新你的,而不是问一个新的,如果它是为同一个问题。你可能还想阅读TimeSpan类是你想要的。
DateTime start=ArrivalDate.Value.Date;DateTime finish=DepartureDate.Value.Date;
试试这个谢谢你的建议,但它的显示和解析呃就像10.00:00:00而不是10天,你知道为什么吗?这是一个时间跨度。你必须使用
TotalDays.ToString()
而不是
numberOfNights.ToString()