【发布时间】:2013-12-07 20:52:15
【问题描述】:
简而言之,我计划通过将 +0800 应用于时区来更改时间并使其成为马来西亚时间的本地时间。
结果出乎意料:
-(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 将始终以格林威治标准时间打印。
-
顺便说一句,要格式化月份,请使用“MM”,而不是“mm”。
标签: ios objective-c cocoa-touch nsdate nsdateformatter