Iphone objective-c-NSDateFormatter返回错误的日期
我有一段代码:Iphone objective-c-NSDateFormatter返回错误的日期,iphone,objective-c,ios,date,nsdateformatter,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-
// 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月1日至23日
第二点:
2-2011-12-25 00:00:00+0000
第三:
2011年12月3日至25日
从字符串中获取日期并对其进行格式化时,为什么日期会更改?我预计第三个NSLog(或dateCal)将等于2012年3月23日。我住在英国,所以这与时区无关
谢谢
杰克你用过setLocale方法吗 另外,从技术问答中: 如果使用用户可见的日期,则应避免设置日期格式字符串,因为很难预测格式字符串在所有可能的用户配置中的表达方式。相反,您应该尝试限制自己设置日期和时间样式(通过-[NSDateFormatter setDateStyle:]和-[NSDateFormatter setTimeStyle:])
您使用过setLocale方法吗 另外,从技术问答中: 如果使用用户可见的日期,则应避免设置日期格式字符串,因为很难预测格式字符串在所有可能的用户配置中的表达方式。相反,您应该尝试限制自己设置日期和时间样式(通过-[NSDateFormatter setDateStyle:]和-[NSDateFormatter setTimeStyle:])
使用
[dateFormat setDateStyle:NSDateFormatterLongStyle]代码>
而不是[dateFormat setDateFormat:@“MMMM d,YYYY”]代码>
我一找到它就会告诉你原因。使用[dateFormat setDateStyle:NSDateFormatterLongStyle]代码>
而不是[dateFormat setDateFormat:@“MMMM d,YYYY”]代码>
我一找到它就会告诉你原因。需要在行中使用小写字母“y”:
[dateFormat setDateFormat:@"MMMM d, YYYY"];
需要在行中使用小写字母“y”:
[dateFormat setDateFormat:@"MMMM d, YYYY"];
我很惊讶你在NSLog self.date上看到“2012年3月23日”。在我的机器上,NSLog(@“%@,[NSDate]);生成一个类似于“2012-03-23 14:47:48+0000”的日期。谢谢,只需使用“yyyy”即可。下面是一个测试,请查看此条件是否适用于[self.date timeintervalnceReferenceDate]==[formatDate timeintervalenceDate]。(对不起,格式很难看,但既然这不是一个真正的答案,我想它应该是一个注释)。@danhself.date
是一个字符串。它是一个字符串,但是为什么我的代码在使用小写字母“yyyy”而不是“yyyy”时可以工作?我很惊讶你在记录self.date时会看到“2012年3月23日”。在我的机器上,NSLog(@“%@,[NSDate]);生成一个类似于“2012-03-23 14:47:48+0000”的日期。谢谢,只需使用“yyyy”即可。下面是一个测试,请查看此条件是否适用于[self.date timeintervalnceReferenceDate]==[formatDate timeintervalenceDate]。(对不起,格式很难看,但因为这不是一个真正的答案,我想应该是一个注释)。@danhself.date
是一个字符串,但是,当我使用小写的“yyyy”而不是“yyyy”时,为什么我的代码可以工作?为什么大写的yyy
导致错误的年份?为什么大写的yyyy
导致错误的年份?