【问题标题】:Checking whether two dates are in the same year检查两个日期是否在同一年
【发布时间】:2016-07-29 13:36:30
【问题描述】:

我正在为一家由datePickers 组成的保险公司制作程序。用户可以选择开始保单的日期,然后选择他们提出索赔的日期。自保单开始日期起 1 年内,每次索赔增加 20% 的保费。但是,无论我以何种方式尝试,即使用户在一年前提出索赔,保费仍会上涨 20%。如果我将开始保单日期设置为 2017 年 7 月 26 日,然后将我的索赔日期设置为 2016 年 7 月 5 日,即从开始保单日期起一年多,我的保单开始于 500 英镑,我仍然可以获得 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();
            }

扩展.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();
            }

【问题讨论】:

  • 问题到底是什么?
  • 自保单开始日期起 1 年内每次索赔增加 20% 的保费。即使索赔是一年多以前,保单仍然上涨了 20%。我在这里做错了什么。
  • 您想检查两个日期是否在一年之内?您的问题需要更具体,并且只保留实际问题的相关代码。
  • 所有相关代码都是我进行计算的方式。
  • 您能否提供一个包含当前输出的示例输入以及您想要的输出?

标签: c# wpf xaml


【解决方案1】:

根据您发布的 cmets,我试图对此进行简化测试。看起来是这样的:

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

这个正在工作。

总之有话要说:如果已经在使用 WPF,您不应该按名称访问选择器,而是先将值绑定到属性! 根据以下cmets:

在您的示例中,您将开始保单放在过去 2 年,但我想要的是未来的保单,如果距离索赔超过一年,那么结果应该是 500 英镑

为此,它只是:

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

【讨论】:

  • 我用过这个,但是不行DateTime Claim1 = Convert.ToDateTime(dpkClaim1.SelectedDate); DateTime StartPolicy = Convert.ToDateTime(dpkStartDateOfPolicy.SelectedDate); if (StartPolicy.Age().Years() &lt; 1 &amp;&amp; Claim1.Age().Years() == 0) { claimOneYearMethod(); }
  • 然后调试你的工具。我的小例子表明扩展和比较工作到 100%。您的问题是格式错误,阅读起来不舒服。看不到任何错误。
  • 还有:doesn't work 是什么意思?为当天选择 2 个DateTimes,结果必须为true!如果不是,则问题出在您的设计上。
  • 我于 2017 年 6 月 15 日开始保单,并于 2016 年 4 月 5 日提出索赔,这已经一年多了,我应该拿回 500 英镑,但我要拿回 600 英镑.
  • 我明白了,箭头是错误的,仅此而已。谢谢你陪我这么久。我用这个代码if ((StartPolicy - Claim1).Years() &lt; 1) { claimOneYearMethod(); }
【解决方案2】:
    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
               }
            }

【讨论】:

  • 你从哪里得到StartDate
  • 无论您身在何处。我想你在某个地方有这些数据,所以只需在那里插入你的开始日期。索赔日期也是如此。
  • 我不使用 wpf,所以我不能 100% 确定语法,但我猜它类似于 DateTime startDate = dpkStartDateOfPolicy.Value;
  • 我试过了,它似乎不起作用DateTime policyStart = Convert.ToDateTime(dpkStartDateOfPolicy.SelectedDate); DateTime endDate = policyStart.AddYears(1); if (Claim1 &gt;= policyStart &amp;&amp; Claim1 &lt;= endDate) { claimOneYearMethod(); }
猜你喜欢
  • 2022-01-12
  • 2013-04-01
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多