我正在接受一个NSDate,只提取一个2位数的数字,代表该月的某一天进入NSString。其中一个日期是:
2013-11-30 00:00:00 +0000
我用:
NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init];
[formatter2 setDateFormat:@"dd"];
NSString *datefromdate = [formatter2 stringFromDate:articleDate];
NSLog(@"Date%@", datefromdate);
[formatter2 release];
但是日志又回来了
29
答案 0 :(得分:8)
您可能处于负时区,即GMT减去某事。这就是为什么2013-11-30 00:00:00 +0000 GMT
在您登录时的第29天。将格式化程序设置为GMT,你会没事的。
答案 1 :(得分:2)
设置您希望时间日期格式化程序使用的时区。 NSDate是2001年1月1日GMT的第一个瞬间,因此没有时区信息。
因此,根据Apple的说法,这将变得复杂,最多需要五个班级:NSDateFormatter
,NSDate
,NSCalendar
,NSTimeZone
,最后{{1 }}
如果你想要的只是你可以使用NSDateComponents
的那一天。
示例:
NSDateComponents
NSLog输出:
NSString *dateString = @"2013-11-30 00:00:00 +0000";
NSDateFormatter *inDateFormatter = [[NSDateFormatter alloc] init];
[inDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
NSDate *date = [inDateFormatter dateFromString:dateString];
NSLog(@"dateFromString: %@", date);
NSTimeZone *timezone = [NSTimeZone timeZoneForSecondsFromGMT:0];
// Using date formatter, result is a string
NSDateFormatter *outDateFormatter = [NSDateFormatter new];
[outDateFormatter setTimeZone:timezone];
[outDateFormatter setDateFormat:@"dd"];
NSString *dayString = [outDateFormatter stringFromDate:date];
NSLog(@"date formatter day: %@", dayString);
// Using date components, result is an integer
NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setTimeZone: timezone];
NSDateComponents *dateComponents = [calendar components:NSDayCalendarUnit fromDate:date];
NSInteger day = [dateComponents day];
NSLog(@"date components day: %i", day);