Нет. Это не странно. NSDateConverter и NSDate просто выполняют свою намеченную работу здесь.
Вы пытаетесь конвертировать "7:46 am"
в дату. Он содержит только время. Дата не указана в строке. NSDate по умолчанию будет "1970-01-01"
(эпоха Unix), если дата не указана. Таким образом, после преобразования строки вы получите дату "1970-01-01 7:46 am"
. При попытке отобразить это в NSLog , если будет отображаться дата после настройки значения смещения timeZone. Я думаю, вы живете в Японии или Корее. Вероятно, смещение вашего региона +09: 00. Таким образом, она отображает дату, вычитая смещение. Итак, вы видите "1969-12-31 22:46:00 +0000"
в журнале.
Вы можете использовать следующий метод для установки того времени на определенную дату, может быть сегодня .
NSString *timeStr = @"7:46 am";
NSDateFormatter *f = [NSDateFormatter new];
[f setDateFormat:@"yyyy-MM-dd"];
NSString *dateStr = [f stringFromDate:[NSDate date]]; // dateStr = 2011-06-10
dateStr = [dateStr stringByAppendingFormat:@" %@", timeStr]; // dateStr = 2011-06-10 7:46 am
[f setDateFormat:@"yyyy-MM-dd h:mm a"];
NSDate *sr = [f dateFromString:dateStr];