objective-c – NSDateFormatter返回错误的date
我有这段代码:
// 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返回:
1 – 2012年3月23日
第二:
2-2011-12-25 00:00:00 +0000
第三:
3-25 /二千零十一分之十二
为什么在从string获取date并格式化date时会更改date? 我期待第三个NSLog(或dateCal)等于23/3/2012。 我住在英国,所以不和时区有关。
谢谢,
插口
需要在行中使用小写字母'y':
[dateFormat setDateFormat:@"MMMM d, YYYY"];
你用过setLocale方法吗?
另外,从技术问答:
如果使用用户可见的date,则应该避免设置date格式string,因为很难预测格式string在所有可能的用户configuration中的表示方式。 相反,你应该尝试限制自己设置date和时间样式(通过 – [NSDateFormatter setDateStyle:]和 – [NSDateFormatter setTimeStyle:])。
使用[dateFormat setDateStyle:NSDateFormatterLongStyle];
而不是[dateFormat setDateFormat:@"MMMM d, YYYY"];
只要我find它,会给你理由。