2010-10-06 5 views
1

CCT est UTC + 6:30 et SGT est UTC + 8:00. Cependant résultat est fauxErreur de résultat de conversion du fuseau horaire

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]); 

Le résultat est que ressembler à

2010-10-06 14: 45: 41,143 TimeZone [4805: 207] 06 Octobre, 2010

02:45 2010-10-06 14: 45: 41,144 TimeZone [4805: 207] 06 Octobre, 2010 6:45

je change à

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

cela fonctionne bien. Pourquoi ne pas travailler avec timeZoneWithAbbreviation

Répondre

0

parce que "CCT" n'est pas valide comme abréviation. Vous pourriez avoir vérifié que comme ceci:

NSTimeZone* destinationTimeZone = [NSTimeZone timeZoneWithName:@"Asia/Rangoon"]; 
NSLog(@"%@", [destinationTimeZone name]); 
NSLog(@"%@", [destinationTimeZone abbreviation]); 

cette imprime:

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 

voir la discussion dans la documentation timeZoneWithAbbreviation:

En général, vous découragez d'utiliser les abréviations, sauf pour des instances uniques telles que "UTC" ou "GMT". Les abréviations de fuseau horaire ne sont pas standardisés et donc une abréviation donnée peut avoir plusieurs significations, par exemple, « EST » désigne heure de l'Est à la fois aux États-Unis et en Australie

BTW, vous pouvez obtenir un NSDictionary avec des abréviations valides avec [NSTimeZone abbreviationDictionary]

+0

Je change comme ça http://paste-it.net/public/dea4257/ mais reste un problème. C'est la valeur nulle de retour – saturngod

+1

GMT + 06: 30 n'est pas non plus une abréviation valide. Vous devez utiliser les noms de fuseau horaire, ou les abréviations de [NSTimeZone abbreviationDictionary]. –