Можно ли точно рассчитать разницу двух DateTimes на Windows Phone 7, даже если пользователь меняет часы телефона? - PullRequest
2 голосов
/ 06 февраля 2011

В настоящее время я делаю небольшое приложение таймера для Windows Phone 7 с возможностью регистрации данных, чтобы люди могли видеть, сколько времени они потратили на выполнение задачи в определенный день.

Они должны иметь возможность закрыть приложение, отвечать на телефонные звонки и т. Д., И приложение, как представляется, продолжает считать (поскольку в WP7 для сторонних разработчиков нет многозадачности). В настоящее время я делаю это, сохраняя время последнего обновления таймера и вычисляя разницу между временем.

Сейчас у меня есть следующий код, который выполняется при обновлении таймера (каждую секунду / при активации приложения):

TimeSpan tempNowLastDiff = DateTime.Now - LastUpdateTime;
CumulativeTime += tempNowStartDiff;
LastUpdateTime = DateTime.Now;

Проблема в том, что если пользователь выходит из приложения и меняет часы, при повторном запуске приложения значение CumulativeTime перестает быть точным. Если я перевожу часы назад, это может привести к отрицательному интервалу времени, если я переверну часы вперед, это может привести к чрезмерно положительному времени.

Единственное решение, которое я могу придумать, это 0 разности, если tempNowStartDiff отрицателен, и просто предполагать, что задание выполнялось в течение 24 часов каждый день, если положительно (что возможно, если, скажем, они отправляются в поездку).

Есть ли способ получить абсолютное время, которое не будет зависеть от изменения времени телефона? Если нет, есть ли способ проверить, изменилось ли время и на сколько?

Редактировать: Я загрузил копию кода таймера здесь с инструкциями о том, как повторить проблему.

Ответы [ 2 ]

1 голос
/ 06 февраля 2011

Я бы использовал DateTime.UtcNow, чтобы иметь абсолютное значение, потому что DateTime.Now относительно текущего часового пояса, и поэтому телефон может изменять время автоматически, если они изменяют timezome (из сети GSM).

0 голосов
/ 06 февраля 2011

В таком случае единственное решение, которое я могу придумать, - это получить время откуда-то извне, например, от timeanddate.com

...