В Cocoa, как мне использовать NSTimeZone, чтобы получить смещение системного часового пояса в виде строки?
-
20-08-2019 - |
Вопрос
Для 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'
или опустите вторую строку, если вам нужен текущий часовой пояс системы (не уверен, какой именно вы запрашивали).