检查两个日期是否在同一年

时间:2016-07-29 13:36:31

标签: c# wpf xaml

我正在为一家由datePickers组成的保险公司制作一个程序。用户可以选择启动策略的日期,然后选择他们提出索赔的日期。对于每项索赔,在保单开始日期的1年内,保费增加20%。然而,无论我如何尝试这种方式,即使用户提出超过一年的索赔,保费仍然会上涨20%。我的政策从500英镑开始,如果我将我的开始保单日期定为2017年7月26日,然后将我的索赔日期设置为05/07/2016,这是从开始保单日期开始超过一年我仍然回到600,因为它增加了20%的政策。它应该保持在500英镑

我的代码是休闲

XAML

<DatePicker HorizontalAlignment="Center" Name="dpkStartDateOfPolicy"  Grid.Column="1" VerticalAlignment="Top" Grid.Row="1" />
        <DatePicker Name="dpkClaim1"  Grid.Row="15" Grid.Column="1"  HorizontalAlignment="Center" VerticalAlignment="Top"/>

xaml.cs

 int policy = 500;
        double Chauffeur = 0.10;
        double Accountant = 0.10;
        double age2125 = 0.20;
        double age2675 = 0.10;
        double claimOneYear = 0.20;
        double tempPolicy;

        // Calculation for Claim in the last year
       public void claimOneYearMethod ()
            {

            tempPolicy = (tempPolicy + tempPolicy * claimOneYear);
            txtPolicy.Text = tempPolicy.ToString();


        }

   // Code for claim within the last year.
            DateTime Claim1 = Convert.ToDateTime(dpkClaim1.SelectedDate);

            DateTime StartPolicy = Convert.ToDateTime(dpkStartDateOfPolicy.SelectedDate);
            if ( StartPolicy.Age().Years() <1 && Claim1 )
            {
                claimOneYearMethod();
            }

Extention.cs

public static class Extensions
{
    public static TimeSpan Age(this DateTime dt)
    {
        return (DateTime.Now - dt);
    }

    public static int Years(this TimeSpan ts)
    {
        return (int)((double)ts.Days / 365.2425);
    }
}

我也试过这个

 if ( StartPolicy.Age().Years() <1 && Claim1.Age().Years() == 0 )
            {
                claimOneYearMethod();
            }

2 个答案:

答案 0 :(得分:2)

根据您发布的评论,我试图对此进行简化测试。这就是它的样子:

private void dtp_ValueChanged(object sender, EventArgs e)
{
    DateTime policy = dtpPolicy.Value;
    DateTime claim = dtpClaim.Value;

    if (policy.Age().Years() < 1 && claim.Age().Years() == 0)
    {
        lblresult.Text = "Result is: true";
    }
    else
        lblresult.Text = "Result is: false";
}

这是已经使用过的扩展名(原创):

public static class Extensions
{
    public static TimeSpan Age(this DateTime dt)
    {
        return (DateTime.Now - dt);
    }

    public static int Years(this TimeSpan ts)
    {
        return (int)((double)ts.Days / 365.2425);
    }
}

这个工作正常。

enter image description here

无论如何要说:如果已经使用WPF,您不应该按名称访问选择器,而是首先将值绑定到属性! 根据以下评论:

  

在你的例子中,你将启动政策放在过去两年,但我想要的是未来的政策,如果自索赔后超过一年,则结果应为500英镑

为此,它只是:

if((policy - claim).Years > 1)
{
    //return your 500;
}

答案 1 :(得分:0)

    DateTime policyStart = policy.StartDate;
    DateTime endDate = policyStart.AddYears(1);

            foreach (var claim in Claims)
            {
               if(claim.ClaimDate >= policyStart && claim.ClaimDate <= endDate)
               {
                  //Code to modify policy rate
               }
            }