2014-10-26 5 views
4

Я пытаюсь найти ответ повсюду, включая StackOverflow .. У меня есть проблема с добавлением события времени из строки, которая выглядит так: 2014-12-31T19 : 00: 00-06: 00. Кстати, я разбираю это из XML. Остальная часть кода, включая ярлыки и т. Д., Работает нормально.Обработка универсального времени (с T) при добавлении события в календарь Xcode

Так вот мой код для добавления нового события в календарь (я пытался добавить «dateFromString» уже в качестве имени с текущим временем, чтобы проверить и это проходит):

EKEventStore *store = [[EKEventStore alloc] init]; 
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { 
    if (!granted) { return; } 
    EKEvent *event = [EKEvent eventWithEventStore:store]; 
    event.title = tempNameOfEvent; 
    event.startDate = dateFromString; //here is a NSDate but incorrectly formatted 
    event.endDate = [event.startDate dateByAddingTimeInterval:60*60]; //set 1 hour meeting 
    [event setCalendar:[store defaultCalendarForNewEvents]]; 
    NSError *err = nil; 
    [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err]; 
}]; 

код из Programmatically add custom event in the iPhone Calendar

Итак, как мне отформатировать NSDate для работы с EKEventStore? Должен ли я попытаться добавить его как «yyyy-MMM-dd HH: mm: ss ZZZ», который выглядит как «2007-01-09 17:00:00 +0000»? Как разбирать строку и исключать часть с помощью «-06: 00»? (заданное время из XML выглядит так: 2014-12-31T19: 00: 00-06: 00).

ответ

0

У вас неправильный формат месяца, должен быть «ММ», отсутствует цитата из «Т» и добавление ненужного пространства до «ххх».

Использование: YYYY-MM-dd'T'HH: мм: ssxxx

См: ICU Formatting Dates and Times
также: Date Field SymbolTable.

Пример:

NSString *ds = @"2014-12-31T19:00:00-06:00"; 
NSDateFormatter *df = [NSDateFormatter new]; 
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssxxx"]; 
NSDate *d = [df dateFromString:ds]; 
NSLog(@"d: %@", d); 

Выход:

d: 2015-01-01 01:00:00 +0000

Выходная форма - это только дисплей по умолчанию, предоставленный NSDate, если вы хотите, чтобы конкретный формат использовал NSDateFormatter для создания строки для отображения.

Обратите внимание, что указанная дата указана в формате UTC, так что она будет в следующем году для поставляемой даты. ;-)

Вы, вероятно, не хотите устранять часовой пояс, NSDates - это время с первого момента 1 января 2001 года по Гринвичу, поэтому часовой пояс действительно необходим, если вы не делаете что-то довольно нестандартное.