2010-05-17 5 views
0

J'ai un stringdate 16-MAY-2010 23:04:44 que j'ai besoin de convertir en fuseau horaire gmt qui est la sortie nécessaire est 17-Mai-2010 12:03:03.Formulaire de conversion de fuseau horaire stringdate

I utilisé pour convertir la date formatteurs mais le résultat que je reçois est pas dans le format i required.I vais envoyer le code s'il vous plaît laissez-moi savoir si je fais correct ou non

Voici le code:

NSString *timeStamp = [format stringFromDate:[NSDate date]]; 
NSString *output = [timeConv dateStringFromString:timeStamp]; 

- (NSString *)dateStringFromString:(NSString *)sourceString 
{  
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4]; 
    [dateFormatter setDateFormat:@"dd-MMMM-yyyy HH:MM:ss"]; 
    NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
    [dateFormatter setTimeZone:gmt]; 
    NSDate *date = [dateFormatter dateFromString:sourceString]; 

    return [dateFormatter stringFromDate:date]; 
} 

La sortie que je reçois est le même temps sans conversion. alors s'il vous plaît laissez-moi savoir la bonne solution.

Répondre

1

Je ne connais aucun cacao, mais si je comprends bien votre code, vous ne dites jamais à l'analyseur que votre chaîne d'origine n'est pas GMT, mais plutôt GMT-1.

Basé sur votre propre code (et encore, sans connaissance du cacao), ce que je crois que vous devez faire:

NSTimeZone *gmtminusone = [NSTimeZone timeZoneForSecondsFromGMT:-3600.0]; 
[dateFormatter setTimeZone:gmtminusone]; 
NSDate *date = [dateFormatter dateFromString:sourceString]; 
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
[dateFormatter setTimeZone:gmt]; 
return [dateFormatter stringFromDate:date]; 

Si cela ne fonctionne pas tout de suite, peut-être vous donne l'idée de ce qu'il faut faire:

  1. Analyser la chaîne avec un format de date défini sur GMT-1, pour afficher une date.
  2. Analyser la date avec un formateur de date défini sur GMT pour générer une chaîne.
+0

"GMT-1" n'est pas une abréviation de fuseau horaire. Le questionneur doit spécifier le fuseau horaire dans lequel il se trouve, soit par nom, soit par décalage. –

+0

@Peter, Comme je l'ai dit, je n'ai aucune connaissance du cacao - cela inclut les abréviations de fuseaux horaires disponibles. Mais compte tenu de mon exemple, le PO est, je l'espère, en mesure de trouver quoi faire de toute façon. Si vous connaissez le cacao, et savez ce que cette ligne devrait être substituée pour faire la même chose, n'hésitez pas à modifier mon article. –

+0

Merci Thomas j'ai eu la solution – Kishore

1

La chaîne de date ne comprend pas une spécification de fuseau horaire, de sorte que le formatter date compté sur vous pour lui dire dans quel fuseau horaire il se trouve.

NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
[dateFormatter setTimeZone:gmt]; 
NSDate *date = [dateFormatter dateFromString:sourceString]; 

Vous avez dit ce que le chaîne d'entrée était en GMT.

Vous devez indiquer au formateur de date le fuseau horaire dans lequel se trouve la date. Une fois cela fait, vous pouvez demander au formateur de convertir la chaîne en une date (dateFromString:) et interprétera la chaîne comme représentant une date dans ce fuseau horaire.

Ensuite, une fois la date ainsi interprétée, changez le fuseau horaire du formateur en GMT et faites-le sortir la chaîne (stringFromDate:). Cette chaîne représentera la date convertie en GMT.