Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 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]);
}];