В Какао, как я могу использовать NSTimeZone, чтобы получить системный часовой пояс в виде строки? - PullRequest
1 голос
/ 27 июня 2009

Для ФДТ я бы хотел "-0700".

У меня свидание в прошлом, чтобы определить, как давно что-то произошло.

NSDate *then = [NSDate dateWithString:@"1976-04-01 12:34:56 -0700"]; // Note the hard-coded time zone at the end

Я буду строить строку даты в другом месте, но я не знаю, как получить доступ к местному часовому поясу.

Я прочитал разделы «Программирование дат и времен Apple для какао», а также ссылки на классы NSTimeZone и NSDate, но мне слишком сложно собрать информацию. Я мог бы действительно использовать несколько строк кода, чтобы показать, как он используется.

Обновление : Когда я боролся с этим, я писал код с использованием шаблона командной строки, чтобы я мог быстро что-то попробовать. Я только что попробовал свой предыдущий код на iPhone, и я получаю NSDate, возможно, не отвечает на '+ dateWithString:' Извините, если это добавило путаницу, кто знал, что Apple изменит такой базовый класс.

Ответы [ 3 ]

4 голосов
/ 17 ноября 2009

Используйте NSDateFormatter для построения NSDate из строки:

NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
[inputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];

NSDate *formatterDate;
formatterDate = [inputFormatter dateFromString:@"1976-04-01 12:34:56 -0700"];

NSString *dateString = [inputFormatter stringFromDate:formatterDate];

NSLog(@"date:%@", dateString);

Таким образом, вы получаете местное время из строки, например, дату, указанную в строке:

"1976-04-01 12:34:56 -0700"

в часовом поясе - 0700, (я в часовом поясе GMT ​​+1000), поэтому я получаю:

2009-11-17 22: 13: 46.480 cmdline [10593: 903] дата: 1976-04-02 05:34:56 + 1000

2 голосов
/ 27 июня 2009

Смещение часового пояса зависит от даты в большей части мира - тех его частях, которые используют летнее время / летнее время.

Единственно правильный способ - генерировать всю строку из даты и часового пояса вместе. Для этого используйте NSDateFormatter.

0 голосов
/ 27 июня 2009

Лучше всего использовать простой форматировщик календаря

NSCalendarDate * date = [NSCalendarDate calendarDate];
[date setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"PDT"]];
NSLog([date descriptionWithCalendarFormat:@"%z"]);

, который выдаст -0700

или пропустите вторую строку, если вы хотите текущий часовой пояс системы (не уверен, что вы запрашивали)

...