日期编号日期格式保持计数超过月末

时间:2013-01-06 21:36:05

标签: objective-c cocoa-touch formatting nsdateformatter

我有一个tableview,其中的部分按天分隔如下:

2012年1月15日
2012年1月16日
2012年1月21日
2012年1月30日
2012年1月31日
2012年2月1日
2012年2月2日

我使用以下代码:

UILabel * lbDayOfWeek = (UILabel *)[cell viewWithTag:1];
NSDate * date = [m_arEventsSorted objectAtIndex:section];
NSDateFormatter* theDateFormatter = [[NSDateFormatter alloc] init];
[theDateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
[theDateFormatter setDateFormat:@"EEEE"];
NSString * weekDay =  [theDateFormatter stringFromDate:date];
lbDayOfWeek.text = weekDay;

UILabel * lbMonthDayYear = (UILabel *)[cell viewWithTag:2];
[theDateFormatter setDateFormat:@"MMM D YYYY"];
NSString * monthDayYear =  [theDateFormatter stringFromDate:date];
lbMonthDayYear.text = monthDayYear;

但我的日子不会在月底重新开始。例如,我得到以下内容:

2012年1月15日
2012年1月16日
2012年1月21日
2012年1月30日
2012年1月31日
2012年2月32日
2012年2月33日

我不确定为什么上面的代码输出错误的日子。

2 个答案:

答案 0 :(得分:3)

查看formatting specifiers。当您想要的日期时,大写'D'表示的日期。二月的第一天也是一年中的第32天。

您的格式字符串应为@"MMM d yyyy"

(还要注意小写和大写'y'之间的区别。你几乎总是想要小写 - 请参阅数据格式指南中"Date Formatting: Fixed Formats"下的注释#1。)

答案 1 :(得分:0)

您正在寻找NSDateFormatterMediumStyle,不要设置格式,设置样式而不是格式:

[theDateFormatter setDateFormat: NSDateFormatterMediumStyle];

仅当您找不到符合您需求的样式时,才应使用日期格式。在这种情况下,格式为@"MMM d, yyyy"