2011-02-06 2 views
2

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

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

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

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

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

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

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

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

+0

Я не понимаю, как это сделать. Все, что он измеряет, - это время, в течение которого ваше приложение не работает *. Это совершенно случайное число. Если вы хотите измерить, как долго это работает, инициализируйте LastUpdateTime до DateTime.Now, как только вы активируете. –

+0

Причина, по которой она не измеряется при запуске приложения, заключается в том, что она позволяет людям отвечать на телефонные звонки, используя другие приложения и т. Д. Поэтому вы можете захотеть узнать, сколько времени вам нужно, чтобы приготовить что-нибудь, но также используйте приложение для приготовления рецептов в то же время. – Jacobite

ответ

0

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

1

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

+0

Привет, я пробовал, что, однако, изменение времени телефона по-прежнему делает то же самое. Вперед, как бы далеко вперед, я не сказал, что назад назад. – Jacobite

+0

Yeap, если пользователь меняет timne вручную отдельно от внешнего webservice, я не вижу много решений. – MatthieuGD

Смежные вопросы