возвращает дату час в будущем - PullRequest
0 голосов
/ 12 февраля 2011

Я получаю текущую дату / время, используя [NSDate date]. Возвращаемое значение - час в будущем. Я проверил настройки местоположения и времени моих телефонов, и они верны.

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

[NSDateFormatter localizedStringFromDate:[NSDate date] dateStyle:NSDateFormatterShortStyle 
                                                       timeStyle:NSDateFormatterShortStyle]

Но мне нужно, чтобы он возвращал правильную дату / время в качестве объекта даты, поскольку я использую его для расчета предполагаемого времени прибытия с использованием -

[date dateByAddingTimeInterval:interval]

Я понимаю, что мой вопрос похож на уже заданный, но ни один из ответов не отвечает моим потребностям. Заранее спасибо!

init] дата возвращения час назад?

1 Ответ

15 голосов
/ 12 февраля 2011

Возможно, вы путаете момент времени (т. Е. Объект NSDate) и момент времени в вашем местоположении (т. Е. Ваше местное время).

Если вы печатаете NSDate (например, NSLog(@"%@", [NSDate date]);, который вызывает[date description]) печатное представление даты находится в часовом поясе UTC (+0000) (по крайней мере, на моем компьютере).
Так что, пока вы не живете в области, где используется UTC, дата печатается[описание даты];всегда "неправильно".Но неправильно означает только то, что его представление отличается от часов в вашем офисе.Дата (как в момент времени) по-прежнему верна.

Когда вы используете localizedStringFromDate:dateStyle:timeStyle:, вы печатаете дату в своем местном часовом поясе.

NSDate *date = [NSDate date];
NSLog(@"%@", date);
NSLog(@"%@", [NSDateFormatter localizedStringFromDate:date dateStyle:NSDateFormatterShortStyle timeStyle:NSDateFormatterShortStyle]);

на моем компьютере это приводит к:

2011-02-12 08:32:10.658 x[75647:207] Date: 2011-02-12 07:32:10 +0000
2011-02-12 08:32:10.661 x[75647:207] Date: Saturday, February 12, 2011 8:32:10 AM Central European Time

напечатанные строки отличаются, но объект NSDate остается тем же.Вот почему вы должны использовать NSDateFormatters, когда вы показываете дату пользователю.Потому что один и тот же момент времени выглядит по-разному в разных местах мира.


Но есть только три места, где дата в формате UTC будет в будущем на один час, поэтому, если вы не живете в Гренландии, на Кабо-Верде или на Азорских островах, я могу быть совершенно неправ ичто-то не так с вашими объектами NSDate.


Редактировать: Из любопытства я снова прочитал документацию о [описание даты].И он говорит:

Строковое представление получателя в международном формате ГГГГ-ММ-ДД ЧЧ: ММ: СС ± ЧЧММ, где ± ЧЧММ представляет смещение часового пояса в часах и минутах от GMT (например, «2001-03-24 10:45:32 +0600»).

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

...