Знам как да използвам 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, както бих очаквал. Така че дори не бих могъл да направя горното, ако исках. какво правя грешно