You can use the SystemEvents.TimeChanged event to detect a time change. However, this will only work if the messagepump program is running - this is normal for Windows client applications, but not for most server applications (such as services, web applications, etc.).
Otherwise, you can use Environment.TickCount - it does not have excellent resolution, but if your "10" seconds can be "almost 10 seconds", you are probably fine. Note that TickCount will roll over when the machine has been running long enough, so you will have to handle this, possibly with a DateTime.UtcNow security check anyway.
I would use a combination of both - but note that there is absolutely no exact way, besides checking some external timer that is known exactly (which will have the primary effect) that will work in the case of VM anyway ... make sure you define that is "reliable enough" before you spend more time than the problem.
Philip ieck
source share