Добавление даты в виде строки в массив - PullRequest
1 голос
/ 10 января 2012

Мне нужно отобразить через 20 дней в формате Mon, Feb 25th 2012. я думаю, что мне придется взять системное время iPhone, и заставить его появиться в следующем формате. Мне нужно добавить все эти 20 дат в массиве впоследствии.

Я только закодировал создание части Array, и понятия не имею, как это сделать. Может кто-нибудь помочь, пожалуйста?

Ответы [ 3 ]

4 голосов
/ 10 января 2012

Маршрут форматирования все очень хорошо, но почему вы хотите хранить даты в виде строк в массиве?

Даты действительно должны храниться как NSDate с, вплоть до того момента, когда они должны отображаться, а затем вы можете запустить их через средство форматирования. NSDate является объектом, и его можно довольно легко сохранить в NSArray.

А если серьезно, спросите себя, зачем вам 20 дней? Что вы собираетесь с ними делать? Есть и другие способы сделать это. Если вам нужно 20 дней для отображения в UITableView, просто сохраните NSDate s и используйте форматировщик для преобразования даты в строки при создании ячеек.

Если вы хотите иметь возможность ссылаться на дату x дней в будущем на основе даты начала, не генерируйте их все сразу, сохраните дату начала, вычислите смещение, которое вы хотите, а затем сгенерируйте новую дату на лету и отформатируйте его перед отображением. На самом деле, этот метод будет работать и для таблиц, вы можете лениво создавать даты и кэшировать их во время работы приложения. Немного больше работы, но гораздо более масштабируемо, чем статический NSArray из NSStrings.

Кажется, что возникает несколько таких вопросов, когда кто-то задает вопрос и получает цепочку ответов, которые на самом деле верны, но на самом деле не пытаются решить суть вопроса.

Да - генерировать даты, превращать их в строки с помощью NSDateFormatter и сохранять их в массиве.

Или подумайте, зачем вам нужны 20 последовательных дат, и как вы собираетесь их использовать, и используйте более подходящий процесс хранения / отображения.

2 голосов
/ 10 января 2012

Добавление дней должно выполняться в виде календарных расчетов.

NSDate *initialDate = ...;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat: @"EEE, MMM dd yyyy"];

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
NSDateComponents *c = [[NSDateComponents alloc] init];
for ( int i = 1; i <=20; i++ ) {
    [c setDay: i];
    NSDate *date = [calendar dateByAddingComponents: c toDate: initialDate options: 0];
    NSLog(@"+ %d days = %@", i, [dateFormatter stringFromDate: date]);
}
[calendar release];
[c release];
[dateFormatter release];
1 голос
/ 10 января 2012

Одна возможность лежит в NSDateFormatter и stringFromDate

на 20-е число:

NSDate *currentDate = [NSDate date];
NSDate *newDate = [[currentDate] dateByAddingTimeInterval:3600 * 24 * 20];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"EEE, MMM dd yyyy";

NSString *dateString = [dateFormatter stringFromDate: newDate];

Изменить: вы можете лучше следовать ответам / предложениям Abizern и Costique в зависимости от ваших конкретных требований.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...