CCT为UTC + 6:30,SGT为UTC + 8:00。但结果是错误的
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMMM dd, yyyy h:mm"];
// The date in your source timezone (eg. EST)
NSDate* sourceDate = [NSDate date];
NSLog([formatter stringFromDate:sourceDate]);
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"SGT"];
//NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];
NSTimeZone* destinationTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"CCT"];
NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;
NSDate* destinationDate = [[[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate] autorelease];
NSLog([formatter stringFromDate:destinationDate]);
结果看起来像那样
2010-10-06 14:45:41.143 TimeZone [4805:207] 2010年10月6日
2010-10-06 14:45:41.144 2:45 TimeZone [4805:207] 2010年10月6日 6:45
我改为
NSTimeZone* destinationTimeZone = [NSTimeZone timeZoneWithName:@"Asia/Rangoon"];
它工作正常。为什么不使用timeZoneWithAbbreviation
答案 0 :(得分:0)
因为“CCT”无效缩写。您可以像这样检查:
NSTimeZone* destinationTimeZone = [NSTimeZone timeZoneWithName:@"Asia/Rangoon"];
NSLog(@"%@", [destinationTimeZone name]);
NSLog(@"%@", [destinationTimeZone abbreviation]);
打印出来:
2010-10-06 09:10:59.846 MyTest[39159:207] Asia/Rangoon
2010-10-06 09:10:59.892 MyTest[39159:207] GMT+06:30
请参阅timeZoneWithAbbreviation:
通常,不鼓励使用缩写,但“UTC”或“GMT”等唯一实例除外。时区缩写不是标准化的,因此给定的缩写可能有多种含义 - 例如,“EST”指的是美国和澳大利亚的东部时间
顺便说一句,您可以使用[NSTimeZone abbreviationDictionary]