-2

現在の日付/時刻をユーザーが選択した日付/時刻と比較する必要があります。以下は私のコードスニペットです

-(IBAction)btnSaveTouched:(id)sender {
NSDate *today = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd H:mm"];
NSString *formatterDate = [formatter stringFromDate: today];

NSComparisonResult comparisionResult1 = [self.paramSchedule1StartSQLDateString compare:formatterDate];

if (comparisionResult1 == NSOrderedAscending) {

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Viewing schedule must be after current time." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
    return;
} 

NSLog(@"comparisionResult1 %d", comparisionResult1);

}

btnSaveTouched(UIButton) がタップされると、日付/時刻がデータベースに保存され、画面に戻ります。(ユーザーが日付/時刻を選択するコントローラーを表示)

ただし、別の日付/時刻を比較しようとすると、現在の日付/時刻より後の日付/時刻を選択したにもかかわらず、アラートが表示されます。

NSLog の比較結果 1 の後、値は常に 2 回目のチェックで 1 です。私はこれをやろうとしました NSComparsionResult comparisionResult1 = 0; しかし、それは正しく機能していません。これを行う方法はありますか?

お知らせ下さい。ありがとう

4

3 に答える 3

3

日付間の比較には、このコードを試してください...日付を文字列の形式で比較しないでください。文字列に変換する前の日付を比較します。dateString の正確な日付形式を指定することにより、フォーマッタの関数をself.paramSchedule1StartSQLDateString使用して を日付形式に変換します。dateFromString次に、次の関数を使用して日付を比較します。

NSDate *today = [NSDate date]; // current date
NSDate *newDate = self.paramSchedule1StartSQLDateString; // other date 

NSComparisonResult result; 

result = [today compare:newDate]; // comparing two dates

if(result == NSOrderedAscending)
    NSLog(@"today is less");
else if(result == NSOrderedDescending)
    NSLog(@"newDate is less");
else if(result == NSOrderedSame)
    NSLog(@"Both dates are same");
else
    NSLog(@"Date cannot be compared");
于 2013-06-26T04:31:37.967 に答える
2
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
                [dateFormatter setDateFormat:@"yyyy-MM-dd"];
                NSDate *date1 = [dateFormatter dateFromString:TodayDate];

                NSDateFormatter *dateFormatte = [[[NSDateFormatter alloc] init] autorelease];
                [dateFormatte setDateFormat:@"yyyy-MM-dd"];
                NSDate *date2 = [dateFormatte dateFromString:CompareDate];

                unsigned int unitFlags = NSDayCalendarUnit;

                NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
                NSDateComponents *comps = [gregorian components:unitFlags fromDate:date1  toDate:date2  options:0];

                int days = [comps day];
                NSLog(@"%d",days);
于 2013-06-26T04:51:49.000 に答える