1

这是我的两个日期选择器的代码,我需要使用 if 条件或开关将它们与当前日期进行比较。

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

我在您的代码中看到的唯一日期是startTime.dateendTime.date。我不知道你从哪里得到这些,但他们大概是 NSDates。另一方面,当前日期是[NSDate date]。因此,您可以使用 NSDate 的compare:方法或其他几种比较方法中的任何一种进行比较(请参阅 NSDate 文档)。

于 2013-04-06T02:28:58.947 回答
2

NSDate 实现isEqualToDate:了哪些测试两个日期是否相同到微秒。它还实现earlierDate:并且laterDate:您可以使用它来构建范围检查。

您还可以构建一些帮助程序,让您使用timeIntervalSinceDate:. 没有日期范围对象,但您也可以为您的助手添加中间检查...

@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"); 
}

如果要计算两个日期之间的间隔,请使用此方法

- (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");

 }

取你的 startTime,endTime 而不是 date1,希望它会对你有所帮助。

于 2013-04-06T10:13:51.803 回答