В настоящее время я делаю небольшое приложение таймера для 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 с инструкциями о том, как реплицировать проблему.
Я не понимаю, как это сделать. Все, что он измеряет, - это время, в течение которого ваше приложение не работает *. Это совершенно случайное число. Если вы хотите измерить, как долго это работает, инициализируйте LastUpdateTime до DateTime.Now, как только вы активируете. –
Причина, по которой она не измеряется при запуске приложения, заключается в том, что она позволяет людям отвечать на телефонные звонки, используя другие приложения и т. Д. Поэтому вы можете захотеть узнать, сколько времени вам нужно, чтобы приготовить что-нибудь, но также используйте приложение для приготовления рецептов в то же время. – Jacobite