簡而言之,我計劃獲取當前日期時間,通過將時間應用於+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」,而不是「毫米」。 –