objective-c - NSDateFormatter返回错误的日期

时间:2012-03-23 14:38:15

标签: iphone objective-c ios date nsdateformatter

我有这段代码:

 // Convert string to date object
        NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
        [dateFormat setDateFormat:@"MMMM d, YYYY"];
        NSDate *formatDate = [dateFormat dateFromString:self.date];
        NSLog(@"1-%@", self.date);
        NSLog(@"2-%@", formatDate);
        NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:formatDate];
        NSString *dateCal = [NSString stringWithFormat:@"%d/%d/%d", [components day], [components month], [components year]];
        NSLog(@"3-%@", dateCal);
        milage.date = dateCal;

第一个NSLog返回:

2012年3月23日

第二个:

2-2011-12-25 00:00:00 +0000

第三个:

3-25 /二千零十一分之十二

为什么从字符串中获取日期并格式化时日期会发生变化?我期待第三个NSLog(或dateCal)等于23/3/2012。我住在英国,所以它与时区无关。

谢谢,

杰克

3 个答案:

答案 0 :(得分:3)

需要在行中使用小写“y”:

[dateFormat setDateFormat:@"MMMM d, YYYY"];

答案 1 :(得分:2)

您是否使用过setLocale方法?

另外,来自技术Q& A:

  

如果您正在处理用户可见日期,则应避免设置日期格式字符串,因为很难预测格式字符串在所有可能的用户配置中的表达方式。相反,你应该尝试限制自己设置日期和时间样式(通过 - [NSDateFormatter setDateStyle:]和 - [NSDateFormatter setTimeStyle:])。

答案 2 :(得分:0)

使用[dateFormat setDateStyle:NSDateFormatterLongStyle];
而不是[dateFormat setDateFormat:@"MMMM d, YYYY"]; 我一找到就会给你理由。