Я знаю, как использовать NSTimeZone, чтобы получить смещение для текущего времени в другом часовом поясе. NSDate всегда возвращает относительно GMT, так как я могу получить строку с правильной информацией о часовом поясе? Т.е. я беру текущее время, в котором я нахожусь (в EST), и, используя NSTimeZone, вычитаю 3 часа, необходимые для представления времени в PST. Но все, что я сделал, это вычел 3 часа из времени, которое все еще представлено относительно моего часового пояса. Как я могу заставить NSDateFormatter выплевывать время, используя часовой пояс пункта назначения?
Одна попытка, которую я попробовал, была:
NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
NSTimeZone *tz = [NSTimeZone timeZoneForSecondsFromGMT:(-8 * 3600)]; // for PST
NSDateComponents *dc = [cal components: NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:now];
[cal setTimeZone:tz];
NSDate *newDate = [cal dateFromComponents:dc];
Нет любви. Я мог бы взять отдельные компоненты даты и составить строку, но она не была бы локализуемой.
Сходная проблема:
NSTimeZone *tz = [NSTimeZone timeZoneForSecondsFromGMT:(-8 * 3600)]; // for PST
NSString *abbreviation = [tz abbreviation];
NSString *name = [tz name];
И abbreviation
, и name
в итоге возвращают GMT-0800
, а не PST, как я ожидал. Так что я даже не смог бы сделать вышеизложенное, если бы захотел. Что я делаю не так?