我有一个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日
我不确定为什么上面的代码输出错误的日子。
答案 0 :(得分:3)
查看formatting specifiers。当您想要月的日期时,大写'D'表示年的日期。二月的第一天也是一年中的第32天。
您的格式字符串应为@"MMM d yyyy"
。
(还要注意小写和大写'y'之间的区别。你几乎总是想要小写 - 请参阅数据格式指南中"Date Formatting: Fixed Formats"下的注释#1。)
答案 1 :(得分:0)
您正在寻找NSDateFormatterMediumStyle,不要设置格式,设置样式而不是格式:
[theDateFormatter setDateFormat: NSDateFormatterMediumStyle];
仅当您找不到符合您需求的样式时,才应使用日期格式。在这种情况下,格式为@"MMM d, yyyy"
。