我正在尝试做两件事:
在圣诞节那天,每当导航到页面时都会调用一个方法。
在圣诞节之后,将christmasDay DateTime设置为+1年(因此倒计时“重置”)。
这是我的代码:
private void OnTick(object sender, EventArgs e)
{
DateTime christmasDay;
DateTime.TryParse("11/17/13", out christmasDay);
var timeLeft = christmasDay - DateTime.Now;
int x = DateTime.Now.Year - christmasDay.Year;
if (DateTime.Now > christmasDay)
{
if (x == 0)
x += 1;
christmasDay.AddYears(x);
if (DateTime.Now.Month == christmasDay.Month && DateTime.Now.Day == christmasDay.Day)
{
itsChristmas();
}
}
countdownText.Text = String.Format("{0:D2} : {1:D2} : {2:D2} : {3:D2}", timeLeft.Days, timeLeft.Hours, timeLeft.Minutes, timeLeft.Seconds);
}
当我将日期设置为TODAY时,“itsChristmas()”方法有效......但我实际上并不希望在倒计时的每个刻度上调用它。我尝试将它放在页面的构造函数中,但这不起作用。有什么想法吗?
第二个问题是,如果我将日期设置为今天前一天,它会给出负数。我不知道我的代码发生了什么问题。 :(
答案 0 :(得分:1)
您的解决方案非常复杂。你可以像这样解决它。
private void OnTick(object sender, EventArgs e)
{
var now = DateTime.Now;
var christmasDay = NextChristmas();
if (now.Date < christmasDay.Date)
{
// it's not christmas yet, nothing happens
}
if (now.Date == christmasDay.Date)
{
// it's christmas, do your thing
itsChristmas();
}
}
private DateTime NextChristmas()
{
var thisYearsChristmas = new DateTime(DateTime.Now.Year, 12, 25);
if (DateTime.Now.Date <= thisYearsChristmas.Date) return thisYearsChristmas;
return thisYearsChristmas.AddYears(1);
}
if
州警告可以写得更加简洁,但我详细阐述了它们,以明确发生的事情。