将NSString“2012-06-29”形成NSDate的“NSDateFormatterMediumStyle”?

时间:2012-05-16 13:50:57

标签: iphone ios ios5 nsdate nsdateformatter

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

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月)的形式返回。谢谢!

3 个答案:

答案 0 :(得分: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];

` 你可以在这一点上将它截断/大写为你想要的任何东西,因为你会得到小写的,也许有点太长。 (查看参考资料)

答案 1 :(得分:1)

dateFromString失败了,因为你告诉它期望以下格式的字符串(来自NSDateFormatter reference):

  

1937年11月23日下午3:30

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

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

答案 2 :(得分:0)

尝试设置setDateFormat

[formatter setDateFormat:@“yyyy-MM-dd”];