2013-05-30 5 views
-3

в моем приложении iPhone Мне нужно преобразовать NSString в NSDate с formaT. Вот мой код:Преобразование NSString в NSDate не корректно

+(NSDate*)dateFromJsonString:(NSString*)string{ 

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'"]; 
    NSLog(@"%@", [dateFormat dateFromString:string]); 
    return [dateFormat dateFromString:string]; 


    } 

Если параметр "строка" является 2013-05-30T15: 53: 02 после преобразования - [DateFormat dateFromString: строка] становится 2013-05-30 12:53:02 +0000 , поэтому разница в 3 часа. Как я могу это исправить?

ответ

3

Необходимо установить правильный часовой пояс. Вот пример, исправить ее во временную зону вашего сервера:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"]; 
[dateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'"]; 
return [dateFormatter dateFromString:dict[@"completed_at"]]; 

EDIT: Вы можете проверить имеющиеся временные зоны с методом класса на NSTimeZone:

+ (NSArray *)knownTimeZoneNames 

Просто выводит его к консоли и выберите часовой пояс, соответствующий серверному.

EDIT 2: Возможно, это более полезно:

+ (NSDictionary *)abbreviationDictionary 

Выберите часовой пояс и чем просто изменить @"UTC" в коде выше требуемого сокращения.

+0

спасибо, но что означает UTC? – revolutionkpi

+1

UTC - это код для GMT + 0, т. Е. Часовой пояс Greenwich. –

0

Попробуйте эту датуФормат. Поскольку часовой пояс не указан в dateString, dateFormatter предполагает, что это локальный часовой пояс. Если вы знаете часовой пояс, установите его в форматтер.

[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"]; 

Проверьте, пожалуйста, this answer.

0

Это вопрос TimeZone, так что используйте этот код, чтобы решить эту проблему:

+(NSDate*)dateFromJsonString:(NSString*)string 
    { 
    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en-US"]; 

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'"]; 
    [dateFormat setLocale:locale]; 
    [dateFormat setTimeZone:[NSTimeZone systemTimeZone]]; 
    NSLog(@"%@", [dateFormat dateFromString:string]); 
    return [dateFormat dateFromString:string];  
    } 

Надеется, что это помогает.

0

Вам просто нужно установить текущий часовой пояс для форматирования даты. Из-за этого у вас есть разница во времени. Используйте ниже код ..

+(NSDate*)dateFromJsonString:(NSString*)string 
{ 
    NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init]; 
    [inputFormatter setTimeZone:[NSTimeZone defaultTimeZone]]; 
    [inputFormatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ss"]; 
    NSDate *xExpDate = [inputFormatter dateFromString:string]; 
    return xExpDate; 
} 
0

Для установки часового пояса можно использовать следующий код.

[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; 

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

Try каротаж NSLog(@"%@",[dateFormatter stringFromDate:date]); первый

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