如何评估两个DateTime何时彼此相等

时间:2012-12-30 05:22:07

标签: c# visual-studio windows-phone-7 windows-phone windows-phone-8

情况就是这样:我的应用程序中有一个TimePicker。我希望用户能够使用TimePicker选择时间,然后应用程序将在使用TimePicker输入的时间向用户发送通知。我正在用C#编写Windows Phone应用程序。到目前为止,这是我的代码(我不认为这是正确的)

DateTime now = DateTime.Now;
DateTime? get = timePicker1.Value;         

if (now == get)
{
    ShellToast toast = new ShellToast();
    toast.Title = "Title";
    toast.Content = "The Time Has Come!";
    toast.Show();
}

但每次运行代码时,它都会给我一个异常,应用程序根本不会加载,并且每次通知(toast)都不会显示。 (我也知道应用程序无法在前台运行以显示通知)。 (我知道通知有效,因为我可以让它与其他情况一起工作)。

基本上,我的问题是:如何在最终用户定义的特定时间触发通知?

4 个答案:

答案 0 :(得分:1)

Line 1 : DateTime now = DateTime.Now;
Line 2 : DateTime? get = timePicker1.Value;

Line 1中,您获得系统当前日期时间,“now”是日期时间而非空。 但在Line 2中,“get”是null-able变量,您将获得timepicker.value并将日期时间与时间进行比较。 我不知道你有什么例外但是通过2次额外检查可以获得更安全的代码

  1. null检查“get”
  2. 确保在开发环境中可以将日期时间与时间值进行比较。

答案 1 :(得分:1)

首先,如果应用程序在前台运行,则Toast通知将不会显示。它应仅用于后台代理或应用程序在锁定屏幕下运行时 其次,如果您的目标是在选定的时间显示通知,则不得比较DateTime值,而是TimeOfDay部分。还要确保用户通过选中“get.HasValue”

输入了有效值

答案 2 :(得分:0)

你必须记住Date.Now有一个完整的时间和日期!

因此,与get变量相比,您必须忽略日期部分,否则可能无效。

尝试将if更改为如下所示:

if (get.HasValue && now.TimeOfDay == get.Value.TimeOfDay)
{
    // your remaining code
}

此外,ShellToast类仅适用于后台服务,而不适用于前台应用程序(请查看备注here)!

如果您想在应用中展示Toast,请使用Coding4Fun Toolkit中的Toast提示。

答案 3 :(得分:0)

您可以比较两个DateTimes的日,月,年值。如果你想要更精确(因为我不知道你想要比较这些值的详细程度),需要花费几分钟和几秒钟。

如果您希望在特定时间收到通知,请尝试using the Alarm class