NSDateFormatter返回错误的字符串?

时间:2013-02-13 14:51:10

标签: iphone ios objective-c nsdate nsdateformatter

我在NSDate上编写了一个类别的方法,它从日期返回一个字符串。格式为{四年数字} {两个月数字} {两天数字}。出于某种原因,格式化程序将当前年份作为四年数字返回,而不是返回日期的年份。这是我的代码:

- (NSString *) YYYYMMDD{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    [formatter setTimeStyle:NSDateFormatterNoStyle];
    [formatter setDateStyle:NSDateFormatterFullStyle];
    [formatter setDateFormat:@"YYYYMMdd"];   // This line is doing something odd, not sure why yet.

    NSString *dateAsString = [formatter stringFromDate:self];

    NSLog(@"Date: %@ String: %@", [self description], dateAsString);

   return dateAsString;

}

查看记录的行,您会注意到年份不灵活且坚持当前年份,即使应该由日期对象表示的年份不是当前年份。

知道为什么会这样吗?我使用的是不正确的格式化程序吗?

2 个答案:

答案 0 :(得分:1)

Y应为小写:y

这对我有用:

+ (NSDateFormatter *) dateFormatter {
    static NSDateFormatter * formatter = nil ;
    if (formatter == nil) {
        formatter = [[NSDateFormatter alloc] init] ;
       [formatter setDateFormat:@"yyyyMMdd"] ;
    }
    return formatter ;
}

HTH

答案 1 :(得分:1)

正如Data Formatting Guide中的评论所述:

  

常见的错误是使用   YYYY。 yyyy指定日历年,而YYYY指定年份   (“年度周”),用于ISO年 - 周历。多数情况   案例,yyyy和YYYY产生相同的数字,但它们可能是   不同。通常,您应该使用日历年。

所以试试:

[formatter setDateFormat:@"yyyyMMdd"];