2015-08-21 3 views
0

Я пытаюсь получить объект NSDate от NSString. Проблема в том, что я losing 1 день в процессе.NSDateFormatter dateFromString неверный результат?

Это NSString: 2015-08-01, а вот код:

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
    [df setDateFormat:@"yyyy-MM-dd"]; 
    NSDate *result = [df dateFromString:dateString]; 

result оказывается 2015-07-31 21:00:00 +0000.

Как это сделать? Я не понимаю. Кроме того, откуда взялись 21:00:00? Я получаю такой же результат, независимо от того, работает ли код на реальном устройстве или симуляторе.

Любая идея, почему? Я подозреваю, что проблема timezone. Тем не менее, я получаю dateString в формате UTC, и я не изменяю его. Мысли?

+0

Вы видите разницу между местным временем и временем UTC, используемым при регистрации 'NSDate'. То, что вы видите, является правильным. Не беспокойтесь об этом. – rmaddy

ответ

2

Проверка с часовым поясом.

[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 
+0

Не делайте этого, если вы действительно не хотите анализировать дату как дату UTC вместо локальной даты. – rmaddy

1

Установка часового пояса будет делать трюк

NSString *dateString = @"2015-08-01"; 
    NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
    [df setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 
    [df setDateFormat:@"yyyy-MM-dd"]; 
    NSDate *result = [df dateFromString:dateString]; 
Смежные вопросы