2013-07-24 4 views
1

J'ai rencontré beaucoup de liens sur stackoverflow et j'ai essayé d'implémenter le code pour convertir l'horodatage dans ce format 2013-07-20T12: 23: 54.411 + 05: 30 à NSDate de ce formatConvertir Timestamp en NSDate ne fonctionne pas

20 juillet 2013 (mardi) 12:23:54 Ou il y a 1 minute, 2 jours format.

J'ai implémenté le code suivant. Le toDate est nul i.e date1 donne une valeur nulle. On dirait que Xcode est sarcastique pour cette question

Je veux dire vraiment, que pensez-vous que le fonctionnement est censé signifier avec un toDate nul? Une exception a été évitée pour le moment. Quelques-unes de ces erreurs vont être signalées avec cette plainte, puis d'autres violations seront simplement faire silencieusement tout ce qui est aléatoire résulte du néant.

Quelqu'un pourrait-il me dire où je me suis trompé?

 NSDateFormatter *dateForm = [[NSDateFormatter alloc] init]; 
    [dateForm setDateFormat:@"yyyy-mm-ddTHH:mm:ssssZ"]; 
    [dateForm setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; 
    [dateForm setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 

    NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    [cal setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; 
    [cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
    NSDate *date1 = [dateForm dateFromString:string]; 
    NSDate *date2 = [NSDate date]; 
    unsigned int unitFlags = NSDayCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit; 

    // gets the difference between the current date and also the date and time in the timestamp of the data 
    NSDateComponents *diffComps = [cal components:unitFlags fromDate:date2 toDate:date1 options:0]; 

    int year = ABS([diffComps year]); 
    int month = ABS([diffComps month]); 
    int day = ABS([diffComps day]); 
    int hour = ABS([diffComps hour]); 
    int minute = ABS([diffComps minute]); 
    int seconds = ABS([diffComps second]); 
    NSString *displayTime; 

    if (year == 0) { 

     if (month == 0) { 

      if (day == 0) { 

       if (hour == 0){ 

        if (minute == 0) { 

         displayTime = [NSString stringWithFormat:@"about %d secs ago",seconds]; 
        } 
        else { 

         displayTime = [NSString stringWithFormat:@"about %d mins ago",minute]; 
        } 
       } 
       else { 

        displayTime = [NSString stringWithFormat:@"about %d hours ago",hour]; 
       } 
      } 
      else { 
       displayTime = [NSString stringWithFormat:@"about %d days ago",day]; 
      } 
     } 
     else { 

      displayTime = [NSString stringWithFormat:@"about %d months ago",month]; 
     } 
    } 
    else { 

     displayTime = [NSString stringWithFormat:@"about %d years ago",year]; 
    } 

EDIT: Cela fonctionne très bien avec une chaîne que j'ai créé dans le appdelegate. Mais pas la chaîne que j'ai créée dans une classe singleton.

+0

"mal tourné" avec quoi? – trojanfoe

+0

vérification edit ..... –

+0

Le format de la date est incorrect. Recherchez le document pour NSDateFormatter, puis suivez une chaîne d'environ 6 liens pour accéder aux codes de format de date. La réponse est là. Je vous le dirais, mais vous ne sauriez pas comment le trouver vous-même. (Ou vous pouvez rechercher SO pour l'une des dizaines de fois dans le passé lorsque cette question a été posée.) –

Répondre

2

Vous n'utilisez pas le format d'heure correct; Je suggérerais ceci:

yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ 
+1

désolé de jouer avec votre format Mais selon 'NSLog (@"% @ ", [df stringFromDate: [df dateFromString: @" 2013-07-20T12: 23: 54.411 + 05: 30 "]]);' il devrait être correct maintenant –

+0

@MatthiasBauch Pas un problème.Merci – trojanfoe

+0

Juste une clarification de plus, Ce code fonctionne pour une chaîne et pas l'autre qui a le même format de temps ... une idée pourquoi? –