iPhone/Objective -C-海外のタイムゾーンに関するNSDateComponentsとNSCALENDARの問題を手伝ってください

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

質問

以下のユーティリティ方法を使用して、秒、数分、時間などを表示します。

たとえば、1時間前

私はiPhoneアプリケーションをテストしている海外の友人がいます。アイテムを提出するたびに、この方法は常に「1時間前」に戻ります。なぜなら、ニュージーランドは2時間先にあり、サーバーはオーストラリアでホストされているため、明らかに2時間遅れています。

SQLサーバーが追いつくまでです。アイテムの日付が適切に計算を開始したとき。

タイムゾーンの違いをどのように処理し、ユーティリティ方法をグローバルに作業するために変更できるのか疑問に思っていますか?メソッドの変更をお気軽にお問い合わせください。そうすれば、コードの行がそれほど多くないようにしてください(本当に退屈だと感じている場合 - そして寛大です)。

前もって感謝します。

+ (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;
}

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top