【发布时间】:2012-03-23 14:38:14
【问题描述】:
我有这段代码:
// 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 年 1 月 1 日至 3 月 23 日
第二个:
2-2011-12-25 00:00:00 +0000
第三个:
3-25/12/2011
为什么从字符串中获取日期并格式化后日期会改变?我期待第三个 NSLog(或 dateCal)等于 23/3/2012。我住在英国,所以与时区无关..
谢谢,
杰克
【问题讨论】:
-
我很惊讶您在 NSLog self.date 时看到“2012 年 3 月 23 日”。在我的机器上, NSLog(@"%@", [NSDate date]);产生类似“2012-03-23 14:47:48 +0000”的日期。
-
谢谢,只需要改用'yyyy'..
-
这里做个测试,看看这个条件是否成立 [self.date timeIntervalSinceReferenceDate] == [formatDate timeIntervalSinceReferenceDate]。 (丑陋的格式,抱歉,但由于这不是一个真正的答案,我认为它应该是一个评论)。
-
@danh
self.date是一个字符串。 -
它是一个字符串,但是当我使用小写字母 'yyyy' 而不是 'YYYY' 时,为什么我的代码可以工作?
标签: iphone objective-c ios date nsdateformatter