Дата и часовой пояс

В нашем приложении нам всегда нужно выбирать текущее восточное время (EST или EDT).

Мы устанавливаем часовой пояс приложения, как показано ниже в делегате приложения:

NSTimeZone *ESTTimeZone = [NSTimeZone timeZoneWithName:@"US/Eastern"];
[NSTimeZone setDefaultTimeZone:ESTTimeZone];

Кроме того, для NSDateFormatter мы устанавливаем языковой стандарт следующим образом:

NSDateFormatter *formatForFileName  = [[NSDateFormatter alloc] init];
[formatForFileName setDateFormat:@"yyyyMMdd"];
NSLocale *uslocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[formatForFileName setLocale:uslocale];
[uslocale release];

Если мой iPad настроен на правильную дату и время EST, проблем нет. Если бы я записал текущую дату следующим образом:

NSLog(@"current date : %@",[formatForFileName stringFromDate:[NSDate date]]);

сегодняшняя дата будет отображаться правильно. Однако, если я изменю дату своего iPad на дату следующего дня и сохраню текущую дату, я бы хотел, чтобы были возвращены текущая дата и время EST. Однако [NSDate date] возвращает мне текущую дату iPad (дату следующего дня) и время, а не дату и время EST.

Есть ли способ получить правильную дату и время EST, используя [NSDate date], независимо от того, что пользователь установил на своем iPad.

Спасибо.


person Hetal Vora    schedule 03.02.2011    source источник


Ответы (2)


Я не уверен, что понимаю ваш вопрос. [NSDate date] всегда создает дату с датой / временем, которое ОС считает действительным в данный момент, то есть время, на которое установлены часы устройства. Если у вас есть сомнения, действительно ли это текущее время, вам нужно будет связаться с надежным сервером времени в Интернете и узнать время оттуда.

person Ole Begemann    schedule 03.02.2011

[NSDate date] возвращает дату, установленную на текущую системную дату и время. Поэтому, когда пользователь переходит на дату следующего дня в системе, [NSDate date] вернет дату следующего дня. NSDate предполагает (справедливо), что системная дата является правильной датой.

Чтобы отобразить фактическую дату EST, вам нужно будет запросить источник (удаленный источник), отличный от системы, для даты, которую вы хотите.

person Cybersam    schedule 03.02.2011