Objective c 如何获取两个日期之间的月和年的名称

Objective c 如何获取两个日期之间的月和年的名称,objective-c,ios4,Objective C,Ios4,我想取两个日期之间的月份和年份的名称。假设我的开始日期是2010年1月23日,结束日期是2011年2月25日,因此我希望获得与年份相关的月份列表,例如2010年1月、2010年2月--2011年2月 您要使用的是NSDateFormatter。文件说: 创建NSDateFormatter的实例 NSDate(和)的字符串表示形式 NSCalendarDate)对象,并转换 日期和日期的文本表示法 将时间转换为NSDate对象。你可以 表示日期的表示 并灵活使用预设时间 格式样式或自定义格式 字符

我想取两个日期之间的月份和年份的名称。假设我的开始日期是2010年1月23日,结束日期是2011年2月25日,因此我希望获得与年份相关的月份列表,例如2010年1月、2010年2月--2011年2月

您要使用的是NSDateFormatter。文件说:

创建NSDateFormatter的实例 NSDate(和)的字符串表示形式 NSCalendarDate)对象,并转换 日期和日期的文本表示法 将时间转换为NSDate对象。你可以 表示日期的表示 并灵活使用预设时间 格式样式或自定义格式 字符串


如果需要确定两个日期之间的月份,可以使用NSCalendar。

以下是我的大致操作方法(警告:在浏览器中键入,yadda yadda):

这将为您提供一个
NSDate
对象数组,这些对象表示相隔大约一个月的日期,从开始日期开始,到结束日期或大约结束日期结束

如果您想以可读的方式显示它们,您将使用
NSDateFormatter

NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"MMMM yyyy"];
for (NSDate *date in dates) {
  NSLog(@"%@", [f stringFromDate:date]);
}

[f release];

当我在我的计算机上运行此程序时,我得到:

EmptyFoundation[3327:a0f] January 2010
EmptyFoundation[3327:a0f] February 2010
EmptyFoundation[3327:a0f] March 2010
EmptyFoundation[3327:a0f] April 2010
EmptyFoundation[3327:a0f] May 2010
EmptyFoundation[3327:a0f] June 2010
EmptyFoundation[3327:a0f] July 2010
EmptyFoundation[3327:a0f] August 2010
EmptyFoundation[3327:a0f] September 2010
EmptyFoundation[3327:a0f] October 2010
EmptyFoundation[3327:a0f] November 2010
EmptyFoundation[3327:a0f] December 2010
EmptyFoundation[3327:a0f] January 2011
EmptyFoundation[3327:a0f] February 2011
这似乎有点复杂,但它有两个优点:

  • 无论您使用的是哪种日历系统,它都会工作。只需将
    [NSCalendar currentCalendar]
    调用更改为不同的日历,即可在该日历中使用(希伯来语、伊斯兰语等)
  • 它用奇异的天数来表示月份(28天对29天,或者日历上有闰月[是的,它们确实存在])

如果该月的开始日期大于该月的结束日期,则看起来会从列表中忽略最后一个月。在初始化循环时,我将startDate和enddateday都设置为1。@JohnLemberger:这一点很好;是的,您应该重置月份的日期。
EmptyFoundation[3327:a0f] January 2010
EmptyFoundation[3327:a0f] February 2010
EmptyFoundation[3327:a0f] March 2010
EmptyFoundation[3327:a0f] April 2010
EmptyFoundation[3327:a0f] May 2010
EmptyFoundation[3327:a0f] June 2010
EmptyFoundation[3327:a0f] July 2010
EmptyFoundation[3327:a0f] August 2010
EmptyFoundation[3327:a0f] September 2010
EmptyFoundation[3327:a0f] October 2010
EmptyFoundation[3327:a0f] November 2010
EmptyFoundation[3327:a0f] December 2010
EmptyFoundation[3327:a0f] January 2011
EmptyFoundation[3327:a0f] February 2011