2016-06-30 8 views
1

私は指定された日付&の時間が既に現在の日付&時間を過ぎているかどうかをチェックしています。ここで私は今6月30日、12:18である、7月3日17:29endDateInLocalTimezoneと私のと比較することをを得た私はNSDateの比較は常にNSOrderedAscendingを返します

NSString *End = [[values objectAtIndex:index]valueForKey:@"EndTime"]; 

fmt.dateFormat = @"yyyy-MM-dd hh:mm:ss"; 
    utc = [fmt dateFromString:End]; 
    NSDate *endDateInLocalTimezone = [utc dateByAddingTimeInterval:timeZoneSeconds]; 
    fmt.dateFormat = @"MMMM dd, hh:mm a"; 
    endDateInLocalTimezone = [fmt stringFromDate:endDateInLocalTimezone]; 

    NSDate *now = [NSDate date]; 
    now = [fmt stringFromDate:now]; 


    if([endDateInLocalTimezone compare:now] == NSOrderedAscending) 
    { 
     index++; 
     continue; 
    } 

をやったものです。それはNSOrderedAscendingにあります。つまり、左のオペランドが右のオペランドよりも小さいことを意味します。しかし、この場合、右オペランドは左オペランドより小さい。なぜそれはまだifの中に入っていますか?

+0

FYI、最初の 'dateFormat'は' yyyy'、ない 'YYYY'を使用すべきです。 – Rob

+0

私の悪い、今更新しました。私の今の比較の問題は何ですか? – drbj

+0

また、無関係な、私は時間帯の間隔で日付の調整のあなたの意図は何か分からない。これは、あなたの意図が何であるかを診断するのに十分ではないが、日付オブジェクトがどのように機能するかについて何らかの誤解を示唆している。しかし、自分のタイムゾーンで日付オブジェクトを調整していることが分かった場合、そこには一般的に深刻な問題があります。 – Rob

答えて

0

日付オブジェクトではなく日付オブジェクトの文字列表現を比較しています。文字列ではなく、日付を比較します。例えば


NSString *dateString = values[index][@"EndTime"]; 

formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; 
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];   // the EndTime is in GMT/UTC, tell you formatter that 
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; // you generally should make sure to use `en_US_POSIX` in case user is not using gregorian calendar 
NSDate *date = [fmt dateFromString:dateString]; 

NSDate *now = [NSDate date]; 

if ([date compare:now] == NSOrderedAscending) { 
    ... 
} 
+0

2番目のdateFormatを変更するか、このlineendDateInLocalTimezoneにあるべきですか?[fmt stringFromDate:endDateInLocalTimezone]; stringFromDate – drbj

+0

@drbj - あなたは 'utc'と' [NSDate date] 'を直接比較し、その2つの' stringFromDate'呼び出しを_lose_する必要があります。 – Rob

関連する問題