有没有办法在c#中获取日期更改通知?

时间:2008-12-16 19:02:44

标签: c# date

有没有办法在c#中获取日期变更通知?

我有一个要求,即在系统日期发生变化时我必须做些什么。

我发现SystemsEvent.TimeChanged是您可以挂钩的事件,但只有在用户更改时间时才会触发它。

8 个答案:

答案 0 :(得分:6)

通过在午夜运行计划的任务/计算机作业,可以更好地处理这个问题吗?

答案 1 :(得分:2)

你可以按照以下方式实现这一点(不可否认):

编写一个非常轻量级的类,它只存储当前日期。在一个单独的线程中启动它,并定期检查日期,然后睡眠很长时间(事实上,你可以让它睡眠的时间比离开午夜的时间长)。如果日期已更改,请在应用程序的主要部分调用回调函数。

就像我说的,这对你的问题来说似乎不是一个很好的解决方案,而且可能有更好的方法。

答案 2 :(得分:2)

您可能正在寻找System.Threading.Timer。它会以你设定的间隔开火。

答案 3 :(得分:2)

当用户更改系统日期/时间时,系统会广播WM_TIMECHANGE message。处理此问题的正确方法是处理该消息。我怀疑.net事件SystemEvents.TimeChanged只是一个包装器。

答案 4 :(得分:1)

假设您要求的是知道用户何时更改其PC的日期\时间,我知道这样做的唯一方法是监控EventLog,如下所示:

    static System.Diagnostics.EventLog log = new EventLog("System");

    public Form1()
    {
        log.EntryWritten += new EntryWrittenEventHandler(log_EntryWritten);
        log.EnableRaisingEvents = true;
    }

    void log_EntryWritten(object sender, EntryWrittenEventArgs e)
    {
        if (e.Entry.InstanceId == 1 && e.Entry.EntryType == EventLogEntryType.Information)
            Console.WriteLine("Test");
    }

答案 5 :(得分:0)

您的应用可以运行一个休眠一分钟的循环,然后检查日期。如果它与上次不同,请运行您的逻辑。

但我同意使用计划任务可以更好地处理这种情况。

答案 6 :(得分:0)

不确定是否有这样的事件,但如果没有,一个可用的解决方法是每分钟触发一个计时器,如果在两次通话之间的时间变化超过5分钟,那么你可以非常确定时间已经以某种方式改变了。如果你愿意的话,你可以通过每秒触发一次事件并检查超过10秒的时间差来获得更好的粒度,但每分钟可能就足够了。

答案 7 :(得分:0)

或者将其用于DST信息: TimeZone.CurrentTimeZone.GetDaylightChanges(DateTime.Today.Year)