2015-03-16 2 views
0

Я пытаюсь получить две даты из строки, так что код ниже:NSDateFormatter добавляет 10 часов?

  NSString *serverDateString  = array[0]; 
     NSString *nextEventDateString = array[1]; 
     NSDateFormatter *dateFormatter = [NSDateFormatter new]; 
     [dateFormatter setDateFormat:@"hh:mm dd.MM.yyyy"]; 

     timer.serverTime   = [dateFormatter dateFromString:serverDateString]; 
     timer.nextEventTime  = [dateFormatter dateFromString:nextEventDateString]; 

Но что я получаю:

(lldb) po serverDateString 
12:15 16.03.2015 

(lldb) po nextEventDateString 
00:00 17.03.2015 

(lldb) po timer.serverTime 
2015-03-15 22:15:00 +0000 

(lldb) po timer.nextEventTime 
2015-03-16 22:00:00 +0000 

Есть некоторые мои ошибки?

+1

Несвязанный, но я правильно делаю вывод из-за отсутствия обозначения AM/PM, что час в этих строках даты составляет 24 часа? Если это так, используйте 'HH', а не' hh'. – Rob

+1

«serverTime» и «nextEventTime» отображаются в GMT/UTC, но вы указали «NSDateFormatter» на синтаксический анализ этих двух строк, как если бы это были локальные представления часового пояса. Являются ли эти две строки значениями местного часового пояса или Zulu/GMT/UTC? – Rob

ответ

1

Проблема в том, что dateFromString: зависит от часовой пояс вашего NSDateFormatter. Так что вам нужно сказать своему форматировщик, который часовой пояс для использования:

NSString *serverDateString  = array[0]; 
NSString *nextEventDateString = array[1]; 

NSDateFormatter *dateFormatter = [NSDateFormatter new]; 
[dateFormatter setDateFormat:@"hh:mm dd.MM.yyyy"]; 

// Set the time zone here 
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"CET"]]; 

// If not sure, this will give you a list of abbreviations 
// NSLog(@"%@", [NSTimeZone abbreviationDictionary]); 

timer.serverTime   = [dateFormatter dateFromString:serverDateString]; 
timer.nextEventTime  = [dateFormatter dateFromString:nextEventDateString]; 

Если вы не знаете о часовом поясе сокращений вы можете использовать, вы можете использовать NSTimeZone abbreviationDictionary, как показано выше.

+0

Спасибо, он работал + я могу добавить это: я использовал GMT, но timer.serverTime возвращал нуль. Моя ошибка заключалась в том, что «h» составляет около 1-12 часов, и мне нужно «H», то есть 0-23. – Aleksandr

Смежные вопросы