Windows Phone倒计时应用

时间:2013-11-19 05:39:54

标签: c# datetime windows-phone-8 windows-phone

我正在尝试做两件事:

在圣诞节那天,每当导航到页面时都会调用一个方法。

在圣诞节之后,将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()”方法有效......但我实际上并不希望在倒计时的每个刻度上调用它。我尝试将它放在页面的构造函数中,但这不起作用。有什么想法吗?

第二个问题是,如果我将日期设置为今天前一天,它会给出负数。我不知道我的代码发生了什么问题。 :(

1 个答案:

答案 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州警告可以写得更加简洁,但我详细阐述了它们,以明确发生的事情。