В Cocoa, как мне использовать NSTimeZone, чтобы получить смещение системного часового пояса в виде строки?

StackOverflow https://stackoverflow.com/questions/1052373

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

Использование 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 командная строка[10593:903] дата: 1976-04-02 05:34:56 +1000

Вероятно, лучший способ - это использовать простой форматировщик календаря

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

который выведет '-0700'

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top