Конвертировать NSDate из GMT + 0 (Лондон) в Часовой пояс пользователя - PullRequest
0 голосов
/ 29 мая 2011

У меня есть NSString (дата), полученная из моей базы данных MySQL, которая находится в GMT +000 (Лондон), и ее формат такой: 05.12.2011 17:21:29.

IХотелось бы узнать, как я могу преобразовать его в часовой пояс пользователя, чтобы, например, если бы пользователь находился в Китае, это была бы эта дата в китайском часовом поясе.

Ответы [ 2 ]

4 голосов
/ 29 мая 2011

Используйте setTimeZone: на вашем входе NSDateFormatter.(Внутренне, NSDate с являются независимыми от часового пояса.)

Например:

// The default time zone for a formatter is the time zone of the user's locale
NSDateFormatter *localFormatter = [[NSDateFormatter alloc] init];
[localFormatter setDateStyle:NSDateFormatterShortStyle];
[localFormatter setTimeStyle:NSDateFormatterMediumStyle];

NSDateFormatter *gmtFormatter = [[NSDateFormatter alloc] init];
[gmtFormatter setDateFormat:@"MM/dd/yyyy h:mm:ss a"];
[gmtFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

NSDate *date = [gmtFormatter dateFromString:gmtDateString];
NSString *locallyFormattedDate = [localFormatter stringFromDate:date];

[localFormatter release];
[gmtFormatter release];

Хотя ... я не думаю, что это учитывает DST, если установка DST в течение указанного времениотличается от текущей настройки.

0 голосов
/ 29 мая 2011

Используйте initWithTimeInterval:sinceDate:, чтобы создать объект даты, который добавляет / вычитает часы.Это будет в секундах, поэтому на 3 часа вперед будет initWithTimeInterval: 10800 sinceDate: (originalDate).Формат, который будет задан, если вы вызовете -description для этого объекта, будет иметь вид (из документации Apple)

Строковое представление получателя в международном формате YYYY-MM-DD HH:ММ: СС ± ЧЧММ, где ± ЧЧММ представляет собой смещение часового пояса в часах и минутах от GMT (например, «2001-03-24 10:45:32 +0600»).

Итакэто будет включать временной интервал.

РЕДАКТИРОВАТЬ: Извините, я использовал неправильный метод init, который вы ищете, initWithTimeInterval: sinceDate :.Вы создаете новую NSDate, которая добавляет или вычитает количество секунд, в течение которых часовой пояс находится впереди / позади.

...