首页 > 解决方案 > 如何将 System.Timer 与 xml UWP 中的 TimePicker 进行比较?

问题描述

我正在尝试在 UWP xml 中创建一个闹钟。所以我正在使用系统计时器并尝试将它与我设置的 TimePicker 进行比较。但我无法获得 Timepicker 的价值。有一条红色下划线表示“无法将 System.Timespan 隐式转换为 System.DateTime”。

private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        DateTime currentTime = DateTime.Now;
        DateTime userTime = timePicker.SelectedTime.Value; //here is where the error shows
        if (currentTime.Hour == userTime.Hour && currentTime.Minute == userTime.Minute && currentTime.Second == userTime.Second)
        {
            timer.Stop();
            try
            {

            }
            catch(Exception ex)
            {

            }
        }
    }

标签: xmlxamluwp

解决方案


“无法将 System.Timespan 隐式转换为 System.DateTime”。

这个异常是因为timePicker.SelectedTime.Value的类型是Timespan,不能直接转换成DateTime。

如果要比较这两个数据,可以将Timespan转换为DateTimeOffset或将当前dateTime的小时、分钟、秒转换为秒,并与timespan进行比较。

另外,你需要在 UI 线程中获取 timePicker.SelectedTime.Value 的值,你可以试试下面的代码。

private async void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        TimeSpan userTime = timePicker.SelectedTime.Value;
        DateTime currentTime = DateTime.Now;
        //Method one
        if (userTime.TotalSeconds == currentTime.Hour * 3600 + currentTime.Minute * 60 + currentTime.Second)
        {
            timer.Stop();
        }

        //Or
        //DateTimeOffset combinedValue2 = new DateTimeOffset(new DateTime(currentTime.Year, currentTime.Month, currentTime.Day) + this.timePicker.Time);
        //if (currentTime.Hour == combinedValue2.Hour && currentTime.Minute == combinedValue2.Minute && currentTime.Second == combinedValue2.Second)
        //{
              //timer.Stop();
        //}

    });
 }

推荐阅读