目标C语言 日数字日期格式保持计数过去的月底



我有一个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日

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

查看格式说明符。大写的"D"表示的日期,当您想要的日期时。2月的第一天也是一年中的第32天。

格式字符串应该是@"MMM d yyyy"

(还要注意小写字母和大写字母"y"之间的区别。您几乎总是希望使用小写字母(参见数据格式指南中"日期格式:固定格式"中的注释#1)

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

[theDateFormatter setDateFormat: NSDateFormatterMediumStyle];

日期格式应该只在你找不到符合你需要的样式时使用。在本例中,格式为@"MMM d, yyyy"

最新更新