我有这段代码:
// 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。我住在英国,所以它与时区无关。
谢谢,
杰克
答案 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"];
我一找到就会给你理由。