简而言之,我计划获取当前日期时间,通过将时间应用于+0800来改变时间并使其位于马来西亚时区。将NSString转换为NSDate转换 - 不正确的结果
结果是出乎意料:
-(NSDate *)departureDateTime
{
NSDate *date = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
NSDateComponents *components = [gregorian components: NSUIntegerMax fromDate: date];
[components setHour: 7];
[components setMinute: 59];
[components setSecond: 17];
NSDate *newDate = [gregorian dateFromComponents: components];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-mm-dd HH:mm:ss Z"];
[dateFormat setLocale:[NSLocale currentLocale]];
NSString *newDateString = [NSString stringWithFormat:@"%@",newDate];
NSString *maskString = [NSString stringWithFormat:@"%@", [newDateString substringToIndex:20]];
NSString *append = [maskString stringByAppendingString:@"+0800"];
NSLog(@"%@",append);
NSDate *finalLocalDate = [dateFormat dateFromString:append];
return finalLocalDate;
}
结果:
为NSLog的追加:2013-12-07 23:59:17 +0800
但finalLocalDate:2013-01-07 15:59:17 +0000
您似乎并未在任何地方设置时区,因此所有日期转换均以当地时区为单位。 NSDate将始终以GMT格式打印。 –
顺便说一句,要格式化月份使用“MM”,而不是“毫米”。 –