0

我正在尝试将月份和日期与以下字符串分开。

2012-06-29

我尝试通过执行以下操作将字符串格式化为中等样式:

//Setting Up My Formatter
formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];

Forming String Into Formatted Date
NSDate *dateFromString = [formatter dateFromString:event.date];

//Separating Components
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:dateFromString];

//Assigning Each Component to my Cell's Labels
cell.dayLabel.text = [NSString stringWithFormat:@"%d", [components day]];
cell.monthLabel.text = [NSString stringWithFormat:@"%d", [components month]];

当我运行 NSLogs 时,我的“event.date”返回“2012-06-26 & dateFromString 返回 null。谁能帮助指导我正确的方向?非常感谢!

编辑:

所以我终于从你的帮助中弄清楚我设置的格式不正确。而不是使用:

[formatter setDateStyle:NSDateFormatterMediumStyle];

我现在正在使用:

[formatter setDateFormat:@"yyyy-MM-dd"];

这是我的问题,尽管从组件来看,月份以整数(1、2、3)的形式返回,但我希望它以“MMM”(1 月、2 月、3 月)的形式返回。谢谢!

4

3 回答 3

2

这是我的做法:

首先创建一个 NSDateFormatter 以正确接收您的字符串:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:"yyyy-MM-dd"];

从您的字符串中获取日期:

NSDate *yourDate = [formatter dateFromString:@"2012-06-29"];

获取日期的组件:

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:yourDate];

获取组件的属性:

[components day];    
[components month];
[components year];

发布需要发布的内容:

[formatter release];

评论回复:

是的,你几乎应该做相反的事情。

创建另一个 NSDateFormatter(使用参考:http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns)

NSDateFormatter *monthFormat = [[NSDateFormatter alloc] init];
[monthFormat setDateFormat:@"MMM"];

NSString *month = [monthFormat stringFromDate:yourDate];

[monthFormat release];

` 此时,您可以将其截断/大写为您想要的任何内容,因为您会得到小写字母,而且可能有点太长了。(检查参考)

于 2012-05-16T14:02:29.807 回答
1

dateFromString失败是因为您已经告诉它期望以下格式的字符串(来自NSDateFormatter参考):

1937 年 11 月 23 日下午 3:30

您需要使用以下方式设置自定义格式:

[formatter setDateFormat:@"yyyy-MM-dd"];
于 2012-05-16T13:59:33.517 回答
0

尝试设置 setDateFormat

[格式化程序 setDateFormat:@"yyyy-MM-dd"];

于 2012-05-16T13:57:46.100 回答