Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone objective-c-NSDateFormatter返回错误的日期_Iphone_Objective C_Ios_Date_Nsdateformatter - Fatal编程技术网

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]。(对不起,格式很难看,但既然这不是一个真正的答案,我想它应该是一个注释)。@danh
self.date
是一个字符串。它是一个字符串,但是为什么我的代码在使用小写字母“yyyy”而不是“yyyy”时可以工作?我很惊讶你在记录self.date时会看到“2012年3月23日”。在我的机器上,NSLog(@“%@,[NSDate]);生成一个类似于“2012-03-23 14:47:48+0000”的日期。谢谢,只需使用“yyyy”即可。下面是一个测试,请查看此条件是否适用于[self.date timeintervalnceReferenceDate]==[formatDate timeintervalenceDate]。(对不起,格式很难看,但因为这不是一个真正的答案,我想应该是一个注释)。@danh
self.date
是一个字符串,但是,当我使用小写的“yyyy”而不是“yyyy”时,为什么我的代码可以工作?为什么大写的
yyy
导致错误的年份?为什么大写的
yyyy
导致错误的年份?