#ios #objective-c #nsdateformatter
#iOS #objective-c #nsdateformatter
Вопрос:
Вот код, о котором идет речь:
// configure created_at date for display
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
NSLog(@"formattedDate=%@",dateFormatter.dateFormat);
NSLog(@"created_at=%@",notice.created_at);
NSString *createdDateStr = [dateFormatter stringFromDate:notice.created_at];
NSLog(@"createdDateStr=%@",createdDateStr);
self.labelCreated.text=createdDateStr;
И вот что получается в NSLog:
2014-06-29 12:06:48.945 [3589:60b] formattedDate=MMM d, y
2014-06-29 12:06:48.947 [3589:60b] created_at=2013-02-22T08:49:52Z
2014-06-29 12:06:48.948 [3589:60b] createdDateStr=(null)
Это выглядит намного сложнее, чем должно быть, но я следил за примерами из библиотеки разработчиков Mac (iOS 7.x, Xcode 5.x) Любые рекомендации будут с благодарностью.
Комментарии:
1.
notice.created_at
уже является anNSString
, а не anNSDate
. Конвертировать нечего, если вы не хотите изменить формат строки.2. На самом деле, это NSDate:
@property (readonly) NSDate *created_at;
3. Не в соответствии с выводом журнала.
4. rmaddy — не уверен, на что вы ссылаетесь — в разделе «рассматриваемый код» выше вы увидите строку,
NSString *createdDateStr = [dateFormatter stringFromDate:notice.created_at];
— он принимаетnotice.created_at
в качестве параметра NSDate для преобразованияstringFromDate
. Я не думаю, что проблема именно в этом…5. Я говорю о 2-м
NSLog
утверждении. Он регистрирует anNSString
, а не anNSDate
. Это означает, что вы передаетеNSString
stringFromDate:
методу. Вот почему вы получаетеnil
результат.
Ответ №1:
Ваш формат даты created_at отличается. Итак, сначала вам нужно соответствующим образом установить dateformat как created_at dateformat, как показано ниже:-
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
Комментарии:
1. Хуссейн Шаббир — это было сложно понять, но ваше предложение привело меня к правильному решению. У меня есть законный NSDate, но с суффиксом часового пояса. Пришлось создать средство форматирования ввода, передать ему мой NSDate в виде форматированной строки и вернуть «дружественный» NSDate. Затем пришлось создать соответствующий форматировщик вывода и вернуть нужную строку. Теперь работает так: (в следующем комментарии 🙂
2. NSDateFormatter *inFormatter = [[NSDateFormatter alloc] init]; [inFormatter setDateFormat:@»гггг-ММ-дд’Т’ХЧ: мм: ssZZZZZ»]; NSDate *inDate = [inFormatter dateFromString:[NSString stringWithFormat:@»%@»,document.created_at]]; NSDateFormatter *outFormatter =[[NSDateFormatter alloc] init]; [outFormatter setDateFormat:@»дд-ММ-гггг»]; NSString *outDate = [outFormatter stringFromDate:inDate]; self. labelCreated.text = [NSString stringWithFormat:@»%@»,устаревший];
Ответ №2:
Пожалуйста, учтите, что если вы конвертируете формат даты из строки, вы должны записать формат точно так же, как в вашей строке, с пробелами и т.д. Другие способы формат даты вернет null