Создать NSDate из NSString - PullRequest
       3

Создать NSDate из NSString

3 голосов
/ 31 января 2012

Я использую следующий код для создания NSDate из строки:

NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
[df setTimeZone:[NSTimeZone defaultTimeZone]];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSLog(@"The date from string: %@", [df dateFromString:@"2012-01-31 01:32:30"]);

Что я вижу в результате:

The date from string: 2012-01-31 07:32:30 +0000

Это явно не правильно.
Знаете ли вы, почему это добавляет 6 часов к моей дате результата и как это исправить?

1 Ответ

8 голосов
/ 31 января 2012

NSLog дат не является хорошим способом отображения дат с часовыми поясами, вместо этого используйте NSDateFormatter, чтобы получить строку для желаемого часового пояса.

NSDate основано на UTC, единственное истинное время, которое может корректно отображаться для любого часового пояса с помощью NSDateFormatter.

Из Apple NSDate документы:

Для анализа строк, содержащих даты, и для генерации строки представления даты, вы должны использовать экземпляр NSDateFormatter с использованием методов dateFromString: и stringFromDate: соответственно - см. «Форматировщики даты» для получения более подробной информации.

Пример кода:

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setTimeZone:[NSTimeZone defaultTimeZone]];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date = [df dateFromString:@"2012-01-31 01:32:30"];
NSLog(@"The date from string: %@", date);

NSString *stringFromDate = [df stringFromDate:date];
NSLog(@"stringFromDate: %@", stringFromDate);

Вывод NSLog:

Дата из строки: 2012-01-31 06:32:30 + 0000
stringFromDate: 2012-01-31 01:32:30

...