日期时间和公式改进C#

时间:2017-08-11 04:45:37

标签: c# date

我在这里输入了一个信息,但是代码确实没有用。当我输入12/11/2015时,会发生什么,Address2Panel显示。这是错误的,因为没有更多的日期我可以输入,因为人A出生于2015年11月12日。逻辑应输入过去5年的地址。但如果从当前日期开始的5年内,生日差距不小,那就错了。

  

人生日= 12/11/2015

     

人A StartLiving = 12/11/2015因为他/她出生的那一天。   不应该显示Address2Panel

 int CurrentDateInMonths = (((DateTime.Today.Year) * 12) + (DateTime.Today.Month));
    static int AlienMonthsAtCurrentAddress = 0;

        DateTime myDateTime;
        //LivedHere = 12/11/2015
        myDateTime = DateTime.Parse(LivedHere.Text);

        AlienMonthsAtCurrentAddress = (CurrentDateInMonths - (((Convert.ToInt16(myDateTime.Year)) * 12) + Convert.ToInt16(myDateTime.Month)));
        if (AlienMonthsAtCurrentAddress < 60)
        {
            Address2Panel.Visible = true;//shows the Address2Panel
        }
        else
        {
            ClearAddress2Panel();//hides also the Address2Panel
        }

有什么建议我应该如何改进我的公式和日期时间操作?

2 个答案:

答案 0 :(得分:0)

无需将日期转换为月份,使用DateTime.Subtract方法减去日期:
从MSDN, DateTime.Subtract 方法从此实例中减去指定的日期和时间。它返回一个 TimeSpan 对象,该对象具有属性Days

static int AlienMonthsAtCurrentAddress = 0;
try
{

    DateTime myDateTime;
    myDateTime = DateTime.Parse(LivedHere.Text);

    // If you don't wish to subtract from today's date use required date in place of DateTime.Now
    TimeSpan span = DateTime.Now.Subtract ( myDateTime ); 
    if (span.Days < 60)
    {
        Address2Panel.Visible = true;//shows the Address2Panel
    }
    else
    {
        ClearAddress2Panel();//hides also the Address2Panel
    }

}
catch { }

答案 1 :(得分:0)

您可以使用单独的逻辑检查年,月和日,然后将它们全部组合在一起:

DateTime date = new DateTime(2015,11,12)
DateTime input = getDate()
int years = input.Year - date.Year - 1
years += If(input.Month > date.Month, 1, 0)
years += If(input.Month = date.Month AndAlso input.Day >= date.Day, 1, 0)

这将输出两天之间的确切年数(截断结果整数)。在你的情况下,你只需将它与5进行比较