Как перевести время в часовой пояс устройства iPhone?

У меня есть время в часовом поясе EST, это делается с помощью функции NOW () на сервере MySQL. Поскольку мой сервер находится в EST, сохраненное время находится в EST. Когда я получаю его из своего приложения на iPhone, мне нужно отобразить его в правильном часовом поясе пользователя. Как я могу это сделать?

Ответы на вопрос(2)

даты в часовой пояс, который вы хотите

+ (NSDate *) convertDate:(NSDate *) date toTimeZone:(NSString *) timeZoneAbbreviation {

    NSTimeZone *systemZone  = [NSTimeZone systemTimeZone];
    NSTimeZone *zoneUTC     = [NSTimeZone timeZoneWithAbbreviation:timeZoneAbbreviation];
    NSTimeInterval s        = [zoneUTC secondsFromGMT];

    NSTimeZone *myZone      = [NSTimeZone timeZoneWithAbbreviation:[systemZone abbreviationForDate:date]];
    NSTimeInterval p        = [myZone secondsFromGMT];

    NSTimeInterval i = s-p;
    NSDate *d = [NSDate dateWithTimeInterval:i sinceDate:date];

    return d;

}


//Test case **note** cgUtil is the class this method is written thus change it accordingly

__block NSDate *now = [NSDate date];
NSLog(@"Current time:%@", now);
[[[NSTimeZone abbreviationDictionary] allKeys] enumerateObjectsUsingBlock:^(NSString * abb, NSUInteger idx, BOOL *stop) {
    NSLog(@"Time zone abb:%@:Time:%@",abb,[cgUtil convertDate:now toTimeZone:abb]);
}];

это зависит от того, что вы подразумеваете под EST - если вы имеете в виду Восточное побережье США, то в целом это на 5 часов меньше UTC (но без учета перехода на летнее время), что должно дать вам 04:00 EST. Старайтесь избегать использования аббревиатур, где это возможно, так как они неоднозначны, например, EST - аббревиатура для Америки / Детройта и Австралии / Сиднея. Использование NSTimeZone initWithName даст более точные результаты.

The Хронос Хранилище Часового пояса предоставляет хорошо читаемую базу данных часовых поясов XML, которая действительно помогает понять, как работают часовые пояса (все это довольно грязно и изменчиво).

Ваш ответ на вопрос