将字符串形式的日期添加到数组

时间:2012-01-10 17:31:37

标签: iphone objective-c

我需要在20天后以Mon, Feb 25th 2012的格式显示。我想我将不得不花费iPhone的系统时间,并使其显示为以下格式。我需要在之后的数组中添加所有这20个日期。

我只编写了创建数组部分,并且不知道如何做到这一点。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:4)

格式化程序路由非常好,但为什么要将日期存储为数组中的字符串?

日期确实应该存储为NSDate直到它们需要显示的时刻,然后您可以通过格式化程序运行它们。 NSDate是一个对象,可以很容易地存储在NSArray中。

但是,严肃地说,问问自己为什么需要20天?你打算怎么处理他们还有其他方法可以做到这一点。如果您需要在UITableView中显示20天,只需存储NSDate并使用格式化程序在创建单元格时将日期转换为字符串。

如果您希望能够根据开始日期参考未来的日期x天,请不要一次性生成所有日期,存储开始日期,计算所需的偏移量,然后生成新日期在运行之前并在显示之前格式化它。实际上,这种方法也适用于表格,您可以懒惰地创建日期,并在应用程序运行时缓存它们。更多的工作,但比NSStrings的静态NSArray更具可扩展性。

似乎有一些类型的问题出现在某人提出问题的地方,并获得一系列事实上正确的答案,但并未真正试图解决问题的精神。

是 - 生成日期,使用NSDateFormatter将它们转换为字符串并将它们存储在数组中。

或者,想一想为什么要连续20个日期,以及如何使用它们,并使用更合适的存储/显示工作流程。

答案 1 :(得分:2)

添加天数应该作为日历计算。

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];

答案 2 :(得分:1)

一种可能性在于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的答案/建议。