-2

私は2つの日付を比較し、一方が他方よりも小さいか等しい場合に何かをしたいので、このようにしようとしました:

if ([self.system.systemInbetriebnahme compare:date] == NSOrderedDescending)
        return nil;

しかし、これにより、両方が等しい場合が削除されます。日付を比較する方法はあり>=ますか?

ありがとうございました

詳細: 2 次元配列から取得した日付があり、(日付ピッカーを介して) コア データに日付が格納されています。ループを実行して、次のルールで 2 つの日付を比較します。データベースに格納されている入力日付以上。

最新の編集:

  • 解析とフォーマット後に2つの行(数値用と日付用)が得られるcsvファイルをインポートします。ここで私は日付に興味があります。

  • これらすべてを配列に格納し、この関数でデータの一貫性を確認した後に保存します。

    for (NSArray * row in array) {
    
    
     // Handle import if there are at least two rows
    
    
    if (row.count > 1) {
    
                dispatch_sync(dispatch_get_main_queue(), ^{
                    // Try to import value,date formatted row
                    double value = [row[0] doubleValue];
                    NSDate * date = [dateFormatter dateFromString:row[1]];
                   //else {
    
                        // Try to import date,value row
    
                        if (date && value != 0.0) {
                            [self addReading:value forDate:date];
                        }
    
  • ここで関数addreadingを呼び出して、いくつかのルールのエラーをチェックし、問題がなければ managedObject コンテキストを保存します。

     if ([installationdatum compare:date] != NSOrderedAscending)
                   { 
                   UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil
                     message:@"installation date is bigger than data"
                                                                      delegate: nil
                                                             cancelButtonTitle:@"OK"
                                                             otherButtonTitles:nil] 
    
                        [alert show];
                       return nil;
    
    
    
                   } else
                   {  //Do nothing
    
                   }
    
  • 私にとっての 1 つのルールは、配列の最初の行要素を取得し、その日付をデータベースに既に格納されている入力と比較することです。self.system.systemInbetriebnahme

  • NSOrderedSameこのすべての後、結果の配列をすべてテーブルビューにリストしますが、値が等しい場合、値の一致は表示されませんself.system.systemInbetriebnahme

4

8 に答える 8

12

単純...

if ([date1 compare:date2] == NSOrderedDescending) {
    NSLog(@"date1 is later than date2");        

} else if ([date1 compare:date2] == NSOrderedAscending) {
    NSLog(@"date1 is earlier than date2");

} else {
    NSLog(@"dates are the same");

}
于 2013-08-27T12:34:53.217 に答える
11

昇順でないことを確認するだけです。

if ([self.system.systemInbetriebnahme compare:date] != NSOrderedAscending)
        return nil;
于 2013-08-27T12:34:27.757 に答える
0

これが役立つと思います。do something when one is less or equal than the other as you別のケースを探しています。

switch ([self.system.systemInbetriebnahme compare: date]) {
case NSOrderedAscending:
    // system date earlier then date
    break;
case NSOrderedSame:
    //  Same
    break;
case NSOrderedDescending:
    // system date later then date
    break;
}
于 2013-08-27T12:34:28.073 に答える
0

>= のような直接比較はありませんが、このように行うことができます

NSComparisonResult compareStart = [date1 compare: selectedDate]; // date1 is 6/6/2011 00:00
NSComparisonResult compareEnd = [date2 compare: selectedDate];   // date2 is 9/6/2011 00:00

if ((compareStart == NSOrderedAscending) || (compareStart == NSOrderedSame)
&& (compareEnd == NSOrderedDescending))
{
// date is in the right range
}

または単に比較する

if ((compareStart == NSOrderedAscending) )
{
// date is in the right range
}
于 2013-08-27T12:36:51.420 に答える