Форматирование NSDates в одном и том же часовом поясе, независимо от системного часового пояса

Я импортирую ряд дат ссылок из удаленного источника. Даты представляют время суток в произвольный день года (в данном случае 01.01.2000). Они поставляются в виде меток времени Unix. Например, 946717200 означает 9 утра. Я также получаю часовой пояс для каждого местоположения.

Я использую следующий код, чтобы перевести это время в реальные даты с правильным смещением от UTC.

-(NSDate *)dateWithInterval:(NSTimeInterval)interval referenceDate:(NSDate *)aRealDate timezone:(NSTimeZone *)aTimeZone
{
  NSDate *time = [NSDate dateWithTimeIntervalSince1970:interval];
  NSDateComponents *components = [[NSDateComponents alloc] init];

  //Set the timezone
  [components setTimeZone:aTimeZone];

  //I'm using Erica Sadun's NSDate+utilities category on NSDate to provide the shorthand methods
  [components setDay:[aRealDate day]];
  [components setMonth:[aRealDate month]];
  [components setYear:[aRealDate year]];
  [components setHour:[time hour]];
  [components setMinute:[time minute]];
  [components setSecond:[time seconds]];

  return [[NSCalendar currentCalendar] dateFromComponents:components];
}

Например, при заданном вводе 946717200, текущей дате и часовом поясе America/Los_Angeles мне дается дата 2013-10-07 16:00:00 +0000, но когда я ее форматирую с помощью NSDateFormatter с часовым поясом, установленным на America/Los_Angeles, и системой, настроенной на тот же часовой пояс, это выглядит как 2013-10-07T01:00:00-0700

Что я делаю не так?


person Jonathan    schedule 07.10.2013    source источник
comment
Ваша проблема в том, что T появляется в этой дате, верно?   -  person Hussain Shabbir    schedule 07.10.2013
comment
Нет, проблема была в том, что фактическая дата была неправильной, форматирование не было проблемой.   -  person Jonathan    schedule 02.12.2013


Ответы (1)


Проблема была в категории NSDate-утилиты. Он полностью игнорирует модификатор часового пояса даты и всегда создает его с учетом часового пояса. Используя мой собственный набор компонентов даты и установив свойство часового пояса, проблема исчезла.

person Jonathan    schedule 02.12.2013