2012-01-31 2 views
3

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

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 часов к моей дате результата и как это исправить?

+0

В каком часовом поясе вы находитесь? – zaph

ответ

8

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

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

От компании Apple NSDate документы:

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

Пример кода:

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 6:32:30 +0000
stringFromDate: 2012-01- 31 01:32:30

+0

Спасибо CocoaFu! –