Вы говорите, что время указано как 2014-11-21T01:25:00
. Это типичный RFC 3339/дата ISO 8601. См. Технический QA1480, что обычно:
NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.locale = enUSPOSIXLocale;
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss";
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
NSDate *date = [formatter dateFromString:timeStamp];
Обратите внимание, что в этом формате временная метка почти всегда находится в формате GMT
, а не EST
. Чтобы устранить эту двусмысленность, большинство строк дат, которые мы получаем с серверов, обычно имеют Z
в конце, например. 2014-11-21T01:25:00Z
, чтобы недвусмысленно заявить, что дата в «зулусском», то есть GMT
/UTC
. Даже при отсутствии информации о часовом поясе мы обычно ожидаем, что это будет GMT
. Если вы точно знаете, что это действительно EST
(в чем я очень сомневаюсь; это было бы очень необычно), то измените строку timeZone
выше (используя вашу timeZoneWithAbbreviation
).
Вот как вы конвертируете строку даты, полученную с сервера, в NSDate
. Затем вы можете сравнить это с [NSDate date]
, как предполагалось в вашей программе isEndDate:isSmallerThanCurrent:
. Но не пытайтесь преобразовать NSDate
в другой часовой пояс.
Вы говорите, что currentESTDate
возвращает неправильное время. NSDateFormatter
рассчитает текущую дату и время в EST в переменной currentDateStamp
. Но затем вы конвертируете его обратно, просто получая исходное значение NSDate
. Таким образом, эта рутина является ненужной.
Чтобы было ясно, у объектов NSDate
нет часовых поясов. Они представляют один и тот же момент времени во всем мире. Часовые пояса вступают в игру только тогда, когда вы конвертируете дату в строку (через NSDateFormatter
).
Таким образом, проблема не в том, «как преобразовать [NSDate date]
в конкретный часовой пояс». Вопрос в том, как преобразовать строку 2014-11-21T01:25:00
с сервера в действительный объект NSDate
(который затем можно сравнить с другими объектами NSDate
). И, надеюсь, приведенный выше код отвечает на этот вопрос.
person
Rob
schedule
06.11.2014
[NSDate date]
как есть? - person rmaddy   schedule 06.11.2014NSDate
в конкретном часовом поясе, возможно, это даст полезную информацию. Например. см. stackoverflow.com/questions/ 7485493/ - person Rob   schedule 06.11.2014NSDate
. Без обид, но неясно, сколько исследований вы провели в поисках похожих вопросов, прежде чем задать их снова себе. Я лично немного ослабил вас, потому что связь между первоначальным вопросом, как мне преобразовать часовой пояс объектаNSDate
, и корневой проблемой (неспособность правильно преобразовать2014-11-21T01:25:00
) не совсем очевидна. Но обе темы уже исчерпывающе освещались здесь ранее. :) - person Rob   schedule 06.11.2014