iPhone/Objective -C-海外のタイムゾーンに関するNSDateComponentsとNSCALENDARの問題を手伝ってください
-
29-10-2019 - |
質問
以下のユーティリティ方法を使用して、秒、数分、時間などを表示します。
たとえば、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;
}
正しい解決策はありません
所属していません StackOverflow