1

2 つの日付間の日数を計算します。

NSDateComponents *datesDiff = [calendar components: NSDayCalendarUnit 
                                          fromDate: someDate
                                            toDate: currentDate
                                           options: 0];

しかし、この方法には欠点が 1 つあります。それは、タイム ゾーンを考慮しないことです。たとえば、+2GMT で現地時間が午前 1:00 の場合、現在の日付は昨日です。

指定されたタイムゾーンの日付を比較する方法(「ハッキング」なし)?

PS: 時差の計算で回答を防ぐため、実際の日数の差が必要です:

  • yesterday 23:00today 1:00-1 day
  • yesterday 1:00today 23:00-1 day
  • today 1:00today 23:00-0 days

  • (すべて現在のタイムゾーンで)

4

2 に答える 2

0

すべての日付を GMT 時間にデフォルト設定してから比較するように日付フォーマッターを構成してみませんか。

    NSDate *now = [NSDate date]; 
    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"GMT"]; // Sets to GMT time. 

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setCalendar:gregorianCalendar]; 
    [formatter setTimeZone:timeZone]; 
    [formatter setDateFormat:@"yyyyMMddHH"];

    NSString *dateString = [formatter stringFromDate:now]; 
  // do whatever with the dates
    [gregorianCalendar release]; 
    [formatter release];
于 2012-09-10T20:34:32.593 に答える
0

それがハッキーではないというあなたの基準を満たしているかどうかはわかりませんが、かなり簡単な方法は、次のようにGMT調整された日付を定義しているようです:

NSDate *newDate = [oldDate dateByAddingTimeInterval:(-[[NSTimeZone localTimeZone] secondsFromGMT])

詳細については、この質問を参照してください。

于 2012-09-11T05:46:36.397 に答える