【问题标题】:Forming NSString "2012-06-29" into NSDate's "NSDateFormatterMediumStyle"?将 NSString“2012-06-29”形成 NSDate 的“NSDateFormatterMediumStyle”?
【发布时间】:2012-05-16 13:50:57
【问题描述】:

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

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

【问题讨论】:

标签: iphone ios ios5 nsdate nsdateformatter


【解决方案1】:

我会这样做:

首先创建一个 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];

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

【讨论】:

  • 谢谢,但对于这个月,我实际上希望格式为 APR、JUN 或 OCT...而不是 4、6 或 10。这可能吗?
【解决方案2】:

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

1937 年 11 月 23 日下午 3:30

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

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

【讨论】:

  • 谢谢,但是对于这个月,我实际上希望格式为 APR、JUN 或 OCT...而不是 4、6 或 10。这可能吗?
【解决方案3】:

尝试设置 setDateFormat

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 2011-04-24
    • 2017-04-23
    • 2021-09-11
    相关资源
    最近更新 更多