2016-12-26 2 views
0

J'ai créé une méthode ci-dessous dans laquelle je peux envoyer dateString, InputFormat & OutputFormat ainsi que ci-dessous.Comment fonctionne NSDateFormatter?

- (NSString *)InstanceAwesomeFormatterunformattedDate:(NSString*)unformattedDate inputFormat:(NSString*)inputFormat outPutFormat:(NSString*)outPutFormat{ 

    //unformattedDate is 13 july 1989 
    //inputFormat is @"dd MMMM yyyy" 
    //outPutFormat is @"dd" 

    NSDateFormatter *myDateFormattr = [[NSDateFormatter alloc] init]; 

    [myDateFormattr setDateFormat:inputFormat]; 

    NSDate *date = [myDateFormattr dateFromString:unformattedDate]; 
    //Why date is 1990-07-12 18:30:00 +0000 
    [myDateFormattr setDateFormat:outPutFormat]; 

    NSString *FinalExpiryDateForUserProfile = [myDateFormattr stringFromDate:date]; 
    // FinalExpiryDateForUserProfile is 13 which is correct 
    return FinalExpiryDateForUserProfile; 

} 

J'essaie de comprendre pourquoi la date imprime 12 au lieu de 13. Toutes les idées

Répondre

2

Vous devez utiliser locale

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"dd"]; 
NSLocale *enLocale = [NSLocale localeWithLocaleIdentifier:@"en_US"]; 
[dateFormatter setLocale:enLocale]; 
+0

merci Fahim, mais plus tôt j'ai essayé avec YYYY au lieu de yyyy, cela fait-il une différence? et si cette méthode est une méthode de classe qui ne ferait aucune différence ou le fait? Veuillez expliquer merci encore –

+0

@ios_Dev: [cela vous aidera] (http://stackoverflow.com/a/15133617/1066828) –

+0

@ios_Dev: Vous devez utiliser YYYY –

0

problème est avec le fuseau horaire et vous pouvez définir comme fuseau horaire ceci:

NSDateFormatter *myDateFormatter = [[NSDateFormatter alloc] init]; 
[myDateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; 

Vous pouvez ajouter au lieu de fuseau horaire GMT selon votre condition. Le réglage NSLocale n'est pas vraiment obligatoire si vous définissez le fuseau horaire approprié selon vos paramètres.

+0

merci monsieur, alors disons pour le fuseau horaire indien, qu'est-ce que j'attribuerais au lieu de @ "GMT"? –

+0

Si son fuseau horaire indien, il devrait fonctionner avec @ "GMT". J'ai dit définir un fuseau horaire différent, cela signifie, des zones comme GMT, PST ou UTC. Pour le fuseau horaire indien, GMT devrait fonctionner. Et si vous souhaitez définir le fuseau horaire selon le fuseau horaire des appareils, référez-vous à: https://agilewarrior.wordpress.com/2012/06/27/how-to-convert-nsdate-to-different-time-zones/ – Pushkraj