iPhone / Objective-C - Aide avec NSDateComponents et NSCalendar Problèmes avec les fuseaux horaires à l'étranger

StackOverflow https://stackoverflow.com/questions/5912647

Question

J'utilise la méthode d'utilité ci-dessous pour afficher les secondes, les minutes, les heures, etc.

par exemple, il y a 1 heure

J'ai un ami à l'étranger qui teste notre application iPhone et chaque fois qu'ils soumettent un élément, la méthode retourne toujours "il y a 1 heure" car la Nouvelle-Zélande est 2 heures à l'avance et le serveur est hébergé en Australie, ce qui est évidemment 2 heures de retard.

Ce n'est que jusqu'à ce que notre serveur SQL se rattrape; Lorsque la date de l'article commence à calculer correctement.

Vous vous demandez simplement comment je peux gérer les différences de fuseau horaire et modifier ma méthode d'utilité pour fonctionner à l'échelle mondiale? N'hésitez pas à aider à modifier la méthode afin que ce ne soit pas autant de lignes de code (si vous vous sentez vraiment ennuyé - et généreux).

Merci d'avance.

+ (NSString *)elapsedTime:(NSDate *)date {
    NSUInteger desiredComponents = NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

    NSDateComponents *elapsedTimeUnits = [[NSCalendar currentCalendar] components:desiredComponents
                                                                         fromDate:date
                                                                           toDate:[NSDate date]
                                                                          options:0];

    // Format to be used to generate string to display.
    NSString *scannedFormat = @"%d %@ ago";
    NSInteger number = 0;
    NSString *unit;

    if ([elapsedTimeUnits year] > 0) {
        number = [elapsedTimeUnits year];
        unit = [NSString stringWithFormat:@"year"];
    } else if ([elapsedTimeUnits month] > 0) {
        number = [elapsedTimeUnits month];
        unit = [NSString stringWithFormat:@"month"];
    } else if ([elapsedTimeUnits week] > 0) {
        number = [elapsedTimeUnits week];
        unit = [NSString stringWithFormat:@"week"];
    } else if ([elapsedTimeUnits day] > 0) {
        number = [elapsedTimeUnits day];
        unit = [NSString stringWithFormat:@"day"];
    } else if ([elapsedTimeUnits hour] > 0) {
        number = [elapsedTimeUnits hour];
        unit = [NSString stringWithFormat:@"hour"];
    } else if ([elapsedTimeUnits minute] > 0) {
        number = [elapsedTimeUnits minute];
        unit = [NSString stringWithFormat:@"minute"];
    } else if ([elapsedTimeUnits second] > 0) {
        number = [elapsedTimeUnits second];
        unit = [NSString stringWithFormat:@"second"];
    } else {
        number = 1;
        unit = @"second";
    }

    // Check if unit number is greater than 1, then append 's' at the end.
    if (number > 1) {
        unit = [NSString stringWithFormat:@"%@s", unit];
    }

    // Resultant string required.
    NSString *scannedString = [NSString stringWithFormat:scannedFormat, number, unit];

    return scannedString;
}

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top