Форматирование строк даты в NSDate в Objective-C - PullRequest
0 голосов
/ 07 февраля 2011

Я боролся с некоторыми раздражающими форматами дат, которые мне возвращал API в моем приложении. Мне нужно преобразовать следующие два типа дат в NSDate, который я могу использовать в своем приложении.

  • SAT 8 AM
  • ПН 8:30 PM

Сейчас я использую что-то похожее на это ...

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"eee ha"];
NSDate *date = [formatter dateFromString:dateString];

Есть две проблемы с этим ...

  • Похоже, время вернулось на 1 час.
  • Он не может обрабатывать MON 8:30PM даты ...

Буду очень признателен за помощь! Спасибо большое: -)

Ответы [ 3 ]

1 голос
/ 07 февраля 2011

Как указывает dreamlax, если вы хотите, чтобы он поддерживал несколько форматов даты, вам придется вызывать его для каждого из этих форматов, пока один из них не совпадет.

Что касается вашего несоответствия по часовому поясу, часовой пояс для форматера по умолчанию равен текущему часовому поясу системы. Можете ли вы показать какой-нибудь код, который демонстрирует, как он отключается на час? Я не вижу ничего подобного.

Конечно, это тоже очень странная вещь. Вы знаете, что «SAT 8AM» означает «8 часов по местному времени в первую субботу после контрольной даты», верно? Так что это будет 3 января 1970 года. Это не значит «следующая суббота после сегодняшнего дня» или что-то в этом роде. Я могу представить некоторые странные случаи, когда это было бы полезно, но я хотел убедиться, что это именно то, что вы действительно хотели сделать.

1 голос
/ 07 февраля 2011

Я не знаю, почему бы установить время на час назад, но чтобы получить 8:30 вечера, вам нужно использовать чч: мма.И для работы с форматами 8:30 вечера и 8 вечера я бы установил условие if else.

0 голосов
/ 29 августа 2011

Если вы не уверены, какой тип ввода вы получите (например, SAT 8AM или MON 8:30 AM), я бы предложил создать метод, который возвращает NSDate и принимает в качестве входных данных строку NSString. В этом методе вы бы:

  • использовать что-то вроде NSRange range = [входящая строка rangeOfString: @ ":"];
  • если range == nil, то [formatter setDateFormat: @ "eee ha"];
  • else [formatter setDateFormat: @ "eee hh: mma"];
  • наконец, верните [formatter dateFromString: dateString];
...