-1

我从 Web 服务获得上午 7:00 和晚上 10:00 作为 NSStrings。我使用以下代码块将它们转换为 NSDate:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"hh:mm a"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"CST"]];

    NSString *openDateString = (NSString*)[timeStringsArray2 objectAtIndex:0];
    NSString *closeDateString = (NSString*)[timeStringsArray2 objectAtIndex:1];

    NSDate *openDate = [dateFormatter dateFromString:openDateString];
    NSDate *closeDate = [dateFormatter dateFromString:closeDateString];

if ([self timeCompare:openDate until:closeDate]) {
        NSLog(@"OPEN-timeCompare");
    } else {
        NSLog(@"CLOSED-timeCompare");
    }

这是比较方法:

-(BOOL)timeCompare:(NSDate*)date1 until:(NSDate*)date2{
    NSDate *date = [NSDate date];
    NSLog(@"open:%@ now:%@ close:%@", date1, date, date2);
    return ([date1 compare:date] == NSOrderedAscending && [date2 compare:date] == NSOrderedDescending);
}

所以当我比较这些值时,我是在比较:

打开:2013-07-26 12:00:00 +0000
现在:2013-07-27 03:50:30 +0000 关闭:2013-07-27 03:00:00 +0000 关闭时间比较

我不知道为什么,因为现在实际上是晚上 950 点,即晚上 10:00 前 10 分钟。它不应该等于过去关闭时间的时间,即使它是 UTC。

4

2 回答 2

1

使用 NSDate 比较选择器:

if ([date1 compare:date2]==NSOrderedDescending) {
   // date1 is after date2
}

还有earlierDate、timeIntervalSinceDate等。

更新:例如,现在测试是在两个日期之间:

    NSDate *now = [NSDate date];
    if ([date1 compare:now]==NSOrderedAscending && [date2 compare:now]==NSOrderedDescending) {
        // now is between the 2 dates
    }
于 2013-07-25T18:20:49.480 回答
1

当没有提供年份时,NSDateFormatter 默认为 2000 年。如果你希望你的 openDate 和 closeDate 在 0001 年而不是 2000 年,试试这个:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//Add year to expected date format
[dateFormatter setDateFormat:@"yyyy hh:mm a"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"CST"]];

NSString *openDateString = (NSString*)[timeStringsArray2 objectAtIndex:0];
NSString *closeDateString = (NSString*)[timeStringsArray2 objectAtIndex:1];

//make new strings with year 0001 + original time
NSString *adjustedOpenDateString = [NSString stringWithFormat:@"%@ %@", @"0001", openDateString];
NSString *adjustedCloseDateString = [NSString stringWithFormat:@"%@ %@", @"0001", closeDateString];

NSDate *openDate = [dateFormatter dateFromString:adjustedOpenDateString];
NSDate *closeDate = [dateFormatter dateFromString:adjustedCloseDateString];

这应该将日期格式化程序设置为查找年份,并将年份 0001 添加到您正在创建日期的字符串中。不幸的是,我目前不在 Xcode 中,所以我不能保证没有错别字!

于 2013-07-25T18:21:06.827 回答