我在这里输入了一个信息,但是代码确实没有用。当我输入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
}
有什么建议我应该如何改进我的公式和日期时间操作?
答案 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进行比较