我在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;
}
查看记录的行,您会注意到年份不灵活且坚持当前年份,即使应该由日期对象表示的年份不是当前年份。
知道为什么会这样吗?我使用的是不正确的格式化程序吗?
答案 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"];