Неправильное время на отметке времени SQLite на iPhone - PullRequest
1 голос
/ 19 июня 2009

Из моего приложения для iPhone я вставляю в базу данных sqlite некоторые данные, которые включают дату, используя значение по умолчанию CURRENT_TIMESTAMP. Все прекрасно работает, за исключением того факта, что время на 1 час отстает от времени, которое должно быть. И это происходит как на устройстве, так и на симуляторе. Любые настройки sqlite (например, текущее время) я могу получить доступ куда-нибудь?

Если вы хотите увидеть код, который я использую для этого, вы можете посмотреть на мой ответ на этот пост: sqlite datetime тип данных с iphone NSdate?

Ответы [ 5 ]

2 голосов
/ 19 июня 2009

Звучит так, как будто может быть несоответствие часового пояса дневного света между SQLite и часовым поясом, который использует NSDateFormatter. выглядит так, как будто SQLite хранит дату и время в GMT . Поэтому вам нужно убедиться, что NSDateFormatter также установлен в GMT. Похоже, что вы можете сделать это с:

gmtFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[gmtFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]

Как только у вас будет экземпляр NSDate, я ожидаю, что вы можете, например, получить его строковую версию, показывающую правильное местное время, используя экземпляр NSDateFormatter, установленный с местным / системным часовым поясом.

Примечание: Я на самом деле не пробовал это.

0 голосов
/ 08 мая 2012

Мне только что пришлось решить эту проблему, и ответ чайника правильный. Временная метка, созданная sqlite, указывается в GMT, поэтому, когда вы читаете ее из базы данных, вам нужно указать форматеру даты, чтобы она также читалась в GMT. Полученная NSDate будет правильной датой в любом часовом поясе, в котором вы находитесь. То, как вы говорите, что исправили это, добавив 1 час, в конечном итоге вас не подведет. Любой, кто использует приложение в часовом поясе GMT, будет видеть все время +1 час. Любой человек в других часовых поясах увидит совершенно другое смещение времени. (Я знаю, что это лет, но это только помогло мне).

0 голосов
/ 26 сентября 2009

Полагаю, вам лучше реализовать предложение teabot. Проблема возникает, когда в одном часовом поясе зима, а в другом нет ...

0 голосов
/ 25 июня 2009

Ну, так как я не мог найти, откуда взялась эта разница в 1 час, я использовал следующий метод, чтобы исправить дату. Это не правильное решение, но оно делает именно то, что мне нужно. Так что на случай, если кто-то столкнется с той же проблемой, что и я ... вот мое исправление:

NSDate *date = [[NSDate alloc] initWithTimeInterval:3600 sinceDate:[formatter dateFromString:score.datetime]];

, который просто добавляет задержку в один час к дате и, следовательно, делает ее правильной.

0 голосов
/ 19 июня 2009

Возможно, вы захотите рассмотреть использование Core Data, которое теперь доступно в O / S 3.0 - это обрабатывает подобные вещи автоматически для вас без необходимости указывать часовые пояса и т. Д. - оно просто использует значения по умолчанию пользователя и сохраняет все согласованным.

Есть много других преимуществ, но это кажется уместным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...