2015-03-09 3 views
0

Я пытаюсь преобразовать строку в дату. он отлично работает, но часы отличаются от строки. Вот мой пример кода:изменение времени после преобразования с использованием NSDateFormatter

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss a"]; 
[dateFormat setTimeZone:[NSTimeZone defaultTimeZone]]; 
[dateFormat setLocale:[NSLocale currentLocale]]; 
NSDate *date = [dateFormat dateFromString:@"2015-03-09 07:40:00 pm"]; 
NSLog(@"%@", date); 

И, выход 2015-03-09 08:16:43.794 testAlarm[1091:40476] 2015-03-09 10:40:00 +0000 извещение час составляет 10, а в строке час составляет 07

+1

'HH' должен быть формата 24H, и у вас есть' pm'? + 3h из-за того, что я догадываюсь о вопросе timeZone. – Larme

+0

Я пробовал с маленькой буквой hh и вывел итоги 2015-03-09 08: 32: 07.593 testAlarm [1116: 44020] 2015-03-09 17:40:00 +0000 – user3346245

+0

NSLog не имеет «реальной» привязки даты –

ответ

0

время чтения с помощью локального часового пояса и NSDate показано использует UTC время (как это всегда бывает, когда не с помощью специального форматирования даты

вы в явной форме сказать ему использовать локальный часовой пояс

[dateFormat setTimeZone:[NSTimeZone defaultTimeZone]]; //! 

сам NSDate хотя я s отметка времени без какого-либо понятия часовых поясов

=> используйте правильный формат даты, чтобы распечатать его. только на входе всегда будет использовать не часовой пояс => UTC


#import <Foundation/Foundation.h> 

int main(int argc, char *argv[]) { 
    @autoreleasepool { 
     NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
     [dateFormat setDateFormat:@"yyyy-MM-dd hh:mm:ss a"]; 
     [dateFormat setTimeZone:[NSTimeZone defaultTimeZone]]; 
     [dateFormat setLocale:[NSLocale currentLocale]]; 

     NSString *input = @"2015-03-09 07:40:00 pm"; 
     NSLog(@"%@", input); //local timezone 
     NSDate *date = [dateFormat dateFromString:input]; 
     NSLog(@"%@", date); //utc! 
     NSString *str = [dateFormat stringFromDate:date]; 
     NSLog(@"%@", str); //local timezone 

    } 
} 
+0

i обновил мой код, теперь он работает отлично, но мне нужно добавить AM/PM, вот новый код NSDateFormatter * dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat: @ "yyyy-MM-dd hh: mm: ss"]; [dateFormat setTimeZone: [NSTimeZone timeZoneWithName: @ "GMT"]]; NSDate * date = [dateFormat dateFromString: @ "2015-03-09 07:40:00"]; NSLog (@ "% @", дата); – user3346245

+0

нравится larme said - hh –

+0

отредактирован хотя :) –

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