В настоящее время я делаю небольшое приложение таймера для Windows Phone 7 с возможностью регистрации данных, чтобы люди могли видеть, сколько времени они потратили на выполнение задачи в данный день.
Они должны иметь возможность закрывать приложение, отвечать на телефонные звонки и т. Д., И приложение будет продолжать считать (поскольку в WP7 нет многозадачности для сторонних производителей). В настоящее время я делаю это, сохраняя время последнего обновления таймера и вычисляя разницу между текущим временем.
Прямо сейчас у меня есть следующий код, который выполняется при обновлении таймера (каждую секунду / при активации приложения):
TimeSpan tempNowLastDiff = DateTime.Now - LastUpdateTime;
CumulativeTime += tempNowStartDiff;
LastUpdateTime = DateTime.Now;
Проблема в том, что если человек выходит из приложения и меняет часы, когда приложение запускается снова, CumulativeTime перестает быть точным. Если я переведу часы назад, это может привести к отрицательному значению TimeSpan, если я переведу часы вперед, это может привести к чрезмерно положительному значению TimeSpan.
Единственное решение, которое я могу придумать, - это 0 разницы, если tempNowStartDiff отрицательный, и просто предположить, что задача выполнялась на 24 часа каждый день, если положительный (что возможно, если, скажем, они отправятся в поездку).
Есть ли способ получить абсолютное время, на которое не повлияют изменения времени телефона? Если нет, есть ли способ проверить, изменилось ли время и на сколько?
Изменить: я загрузил копию кода таймера здесь с инструкциями о том, как воспроизвести проблему.