Ошибка результата преобразования часового пояса - PullRequest
1 голос
/ 06 октября 2010

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] 06 октября 2010 г.

2: 45 2010-10-06 14: 45: 41.144 TimeZone [4805: 207] 06 октября 2010 г. 6: 45

Я изменяю на

NSTimeZone* destinationTimeZone = [NSTimeZone timeZoneWithName:@"Asia/Rangoon"];

работает нормальноПочему бы не работать с timeZone с сокращением

1 Ответ

0 голосов
/ 06 октября 2010

потому что "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» относится к восточному времени в Соединенных Штатах и ​​Австралии

Кстати, вы можете получить NSDictionary с допустимыми сокращениями с [NSTimeZone abbreviationDictionary]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...