Iphone 向数组中添加字符串形式的日期

Iphone 向数组中添加字符串形式的日期,iphone,objective-c,Iphone,Objective C,我需要以2012年2月25日星期一的格式显示从现在起的20天。我想我将不得不采用iPhone的系统时间,并使其以以下格式显示。之后,我需要将所有这20个日期添加到一个数组中 我只编写了创建数组部分的代码,不知道如何做。有人能帮忙吗?一种可能性在于NSDateFormatter和stringFromDate 20日: NSDate *currentDate = [NSDate date]; NSDate *newDate = [[currentDate] dateByAddingTimeInter

我需要以2012年2月25日星期一的格式显示从现在起的20天。我想我将不得不采用iPhone的系统时间,并使其以以下格式显示。之后,我需要将所有这20个日期添加到一个数组中


我只编写了创建数组部分的代码,不知道如何做。有人能帮忙吗?

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

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

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

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

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

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

似乎有一些这样的问题出现了,有人问了一个问题,得到了一系列事实上正确的答案,但并没有真正试图解决问题的精神

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


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

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

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

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

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

似乎有一些这样的问题出现了,有人问了一个问题,得到了一系列事实上正确的答案,但并没有真正试图解决问题的精神

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


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

添加天数应作为日历计算

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

添加天数应作为日历计算

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

这是当前日期,但如何从现在起10天内得到它?如果今天是2012年6月4日,我需要另外9个这样的。。2012年6月,星期五等@Illep-那么它将通过添加时间间隔来确定日期:3600*24*10所以,在不添加循环的情况下,您可以打印前10条或前20条记录吗?如果我输入NSLog,20条记录都会显示吗?-真的吗?为日期添加秒数以进入第二天?。如果在这20天内夏令时发生变化,会发生什么?同一天你要么有两次,要么跳过一天。@Abizern-然后和NSCalendar上床。这是精确性和简单性之间的折衷。这是针对当前日期的,但我如何从现在起10天内得到它呢?如果今天是2012年6月4日,我需要另外9个这样的。。2012年6月,星期五等@Illep-那么它将通过添加时间间隔来确定日期:3600*24*10所以,在不添加循环的情况下,您可以打印前10条或前20条记录吗?如果我输入NSLog,20条记录都会显示吗?-真的吗?阿迪
到第二天的约会还有几秒钟?。如果在这20天内夏令时发生变化,会发生什么?同一天你要么有两次,要么跳过一天。@Abizern-然后和NSCalendar上床。这是准确性和简单性之间的权衡。+1表示鼓励寻找最佳解决方案/方法,而不一定是原始海报所要求的。+1表示鼓励寻找最佳解决方案/方法,而不一定是原始海报所要求的。