1

これは、if 条件またはスイッチを使用して現在の日付と比較する必要がある 2 つの日付ピッカー用のコードです。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
dateFormatter.timeZone=[NSTimeZone defaultTimeZone];
dateFormatter.timeStyle=NSDateFormatterShortStyle;
dateFormatter.dateStyle=NSDateFormatterShortStyle;
NSString *dateTimeString=[dateFormatter stringFromDate:startTime.date];
NSLog(@"Start time is %@",dateTimeString);


NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc]init];
dateFormatter2.timeZone=[NSTimeZone defaultTimeZone];
dateFormatter2.timeStyle=NSDateFormatterShortStyle;
dateFormatter2.dateStyle=NSDateFormatterShortStyle;
NSString *dateTimeString2=[dateFormatter2 stringFromDate:endTime.date];
NSLog(@"End time is %@",dateTimeString2);

私の.hで

@property (weak, nonatomic) IBOutlet UIDatePicker *startTime;
@property (weak, nonatomic) IBOutlet UIDatePicker *endTime;

それ、どうやったら出来るの?本当に必要なのは時間だけなので、それらを NSDate または NSTime に保存する必要がありますか?

また、Objective C に If 範囲はありますか?

ありがとう、

4

4 に答える 4

2

NSDateisEqualToDate:は、2 つの日付がマイクロ秒まで同じかどうかをテストする実装を実装します。また、範囲チェックを構築するために使用できるandも実装earlierDate:しています。laterDate:

を使用して等値チェックの感度を制御できるヘルパーを作成することもできますtimeIntervalSinceDate:。日付範囲オブジェクトはありませんが、ヘルパーに between チェックを追加することもできます...

@interfce NSDate (Comparison)

- (BOOL)isEqualToDate:(NSDate *)aDate within:(NSTimeInterval)tolerance;
- (BOOL)isBetween:(NSDate *)start and:(NSDate *)end within:(NSTimeInterval)tolerance;

@end

@implementation NSDate (Comparison)

- (BOOL)isEqualToDate:(NSDate *)aDate within:(NSTimeInterval)tolerance {

    NSTimeInterval difference = [self timeIntervalSinceDate:aDate];
    return fabs(difference) < tolerance;
}

- (BOOL)isBetween:(NSDate *)start and:(NSDate *)end within:(NSTimeInterval)tolerance {

    NSTimeInterval startDifference = [self timeIntervalSinceDate:start];
    if (startDifference < tolerance) return NO;

    NSTimeInterval endDifference = [end timeIntervalSinceDate:self];
    if (endDifference < tolerance) return NO;

    return YES;
}

@end

私はこれらをテストしていません。

于 2013-04-06T02:47:12.090 に答える
2

これを追加するだけです:

if ([[NSDate date] isEqualToDate:startTime.date]) {
NSLog(@"currentDate is equal to startTime"); 
}

if ([[NSDate date] isEqualToDate:endTime.date]) {
NSLog(@"currentDate is equal to endTime"); 
}

2 つの日付間の間隔を計算する場合は、このメソッドを使用します

- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate


if([startTime.date timeIntervalSinceDate:[NSDate date]] > 0)
{
  //start time greater than today
}

else if([startTime.date timeIntervalSinceDate:[NSDate date]] < 0)
{
    //start time less than today
}

else
{
   //both dates are equal
}

アプリケーションがいつバックグラウンド使用通知に入ったかを知るには、このステートメントを viewDidLoad に追加します

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationEnteredBackground) name:UIApplicationDidEnterBackgroundNotification object:nil];

投稿時に通知する機能を追加

-(void)applicationEnteredBackground
{
   //do all the above steps here when you want.
}

クラスの dealloc 関数では、通知のためにオブザーバーを削除します

-(void)dealloc
{
  [[NSNotificationCenter defaultCenter] removeObserver:self];
}
于 2013-04-06T03:21:50.790 に答える
2

NSDate の compare: メソッドを使用して、以下のようにすることもできます。

 NSDateFormatter* df = [[NSDateFormatter alloc] init];
 [df setDateFormat:@"MM-dd-yyyy"];
 NSDate* date1 = [df dateFromString:@"12-23-2046"];

 NSDate *date2 = [NSDate date];

 if ([date1 compare:date2] == NSOrderedSame){
    NSLog(@"Same");
 }
 if ([date2 compare:date1]==NSOrderedAscending ) {
    NSLog(@"AScending");
 }
 if ([date2 compare:date1]== NSOrderedDescending) {
    NSLog(@"Descending");

 }

date1 の代わりに startTime,endTime を使用してください。

于 2013-04-06T10:13:51.803 に答える
2

コードに表示される日付は と だけstartTime.dateですendTime.date。どこでそれらを取得しているのかわかりませんが、おそらく NSDates です。一方、現在の日付は です[NSDate date]。したがって、NSDate のcompare:メソッドまたは他のいくつかの比較メソッドのいずれかを使用して比較できます (NSDate のドキュメントを参照してください)。

于 2013-04-06T02:28:58.947 に答える