Ios 我如何在不同的日子适应NSDate comparator的开盘和收盘日期?

Ios 我如何在不同的日子适应NSDate comparator的开盘和收盘日期?,ios,datetime,nsdate,Ios,Datetime,Nsdate,比较日期是相当复杂的。我有一个应用程序,可以比较商店的开店和关门日期,它在同一天的很多时候都很有效,比如早上8点开门,下午5点关门 以下是比较时间的代码: if ([self timeCompare:openDate until:closeDate withNow:now]) { NSLog(@"TIMECOMPARATOR = timeCompare>OPEN"); status = YES; } else { NSLog(@"TI

比较日期是相当复杂的。我有一个应用程序,可以比较商店的开店和关门日期,它在同一天的很多时候都很有效,比如早上8点开门,下午5点关门

以下是比较时间的代码:

if ([self timeCompare:openDate until:closeDate withNow:now]) {
        NSLog(@"TIMECOMPARATOR = timeCompare>OPEN");
        status = YES;
    } else {
        NSLog(@"TIMECOMPARATOR = timeCompare>CLOSED");
        status = NO;
    }

    return status;
这将调用以下方法:

+(BOOL)timeCompare:(NSDate*)date1 until:(NSDate*)date2 withNow:(NSDate*)now{
    NSLog(@"TIMECOMPARE = open:%@ now:%@ close:%@", date1, now, date2);
    return ([date1 compare:now] == NSOrderedAscending && [date2 compare:now] == NSOrderedDescending);
}
- (NSDate *)todaysDateFromAMPMString:(NSString *)time
{
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    [fmt setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];

    // Get year-month-day for today:
    [fmt setDateFormat:@"yyyy-MM-dd "];
    NSString *todayString = [fmt stringFromDate:[NSDate date]];

    // Append the given time:
    NSString *todaysTime = [todayString stringByAppendingString:time];

    // Convert date+time string back to NSDate:
    [fmt setDateFormat:@"yyyy-MM-dd h:mma"];
    NSDate *date = [fmt dateFromString:todaysTime];
    return date;
}

当一个人(当然不是计算机)“假定”下班时间是在第二天,如上午7点到凌晨2点,问题就出现了。我显然是指第二天。我如何适应这种情况,以向计算机发出第二天的信号?

这是一个应用程序设计问题,而不是编码问题。你需要为用户定义一个清晰的词汇表来表达他们的意思。我建议在屏幕上添加一个UISwitch,上面有两个位置:“今天”和“明天”。您可以添加一些程序逻辑,猜测您认为用户谈论明天日期的时间,并在这种情况下将默认开关设置为“明天”状态,但用户应该能够告诉您它们的意思。

这是一个应用程序设计问题,而不是编码问题。你需要为用户定义一个清晰的词汇表来表达他们的意思。我建议在屏幕上添加一个UISwitch,上面有两个位置:“今天”和“明天”。您可以添加一些程序逻辑,猜测您认为用户谈论明天日期的时间,并在这种情况下将默认开关设置为“明天”状态,但用户应该能够告诉您它们的意思。

这是一个应用程序设计问题,而不是编码问题。你需要为用户定义一个清晰的词汇表来表达他们的意思。我建议在屏幕上添加一个UISwitch,上面有两个位置:“今天”和“明天”。您可以添加一些程序逻辑,猜测您认为用户谈论明天日期的时间,并在这种情况下将默认开关设置为“明天”状态,但用户应该能够告诉您它们的意思。

这是一个应用程序设计问题,而不是编码问题。你需要为用户定义一个清晰的词汇表来表达他们的意思。我建议在屏幕上添加一个UISwitch,上面有两个位置:“今天”和“明天”。您可以添加一些程序逻辑,猜测您认为用户谈论明天日期的时间,并在这种情况下将默认开关设置为“明天”状态,但用户应该能够告诉您它们的意思。

比较日期的unix时间。无论日期如何,它都是准确的,因为它不断增加。

比较日期的unix时间。无论日期如何,它都是准确的,因为它不断增加。

比较日期的unix时间。无论日期如何,它都是准确的,因为它不断增加。

比较日期的unix时间。无论日期是多少,它都是准确的,因为它不断增加。

您只需添加一个检查,检查这三个
NSDate
是否具有相同的日期(DDMMYYYY)值如何?

您只需添加一个检查,检查这三个
NSDate
是否具有相同的日期(ddmmyyyyy)值?

您只需添加一个检查,检查这三个
NSDate
是否具有相同的日期(DDMMYYYY)值如何?

您只需添加一个检查,检查这三个
NSDate
是否具有相同的日期(DDMMYYYY)值?

首先必须转换字符串“7:00am”、“10:00pm”从当前日期起将日期更改为
NSDate
。这可以通过以下方法实现:

+(BOOL)timeCompare:(NSDate*)date1 until:(NSDate*)date2 withNow:(NSDate*)now{
    NSLog(@"TIMECOMPARE = open:%@ now:%@ close:%@", date1, now, date2);
    return ([date1 compare:now] == NSOrderedAscending && [date2 compare:now] == NSOrderedDescending);
}
- (NSDate *)todaysDateFromAMPMString:(NSString *)time
{
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    [fmt setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];

    // Get year-month-day for today:
    [fmt setDateFormat:@"yyyy-MM-dd "];
    NSString *todayString = [fmt stringFromDate:[NSDate date]];

    // Append the given time:
    NSString *todaysTime = [todayString stringByAppendingString:time];

    // Convert date+time string back to NSDate:
    [fmt setDateFormat:@"yyyy-MM-dd h:mma"];
    NSDate *date = [fmt dateFromString:todaysTime];
    return date;
}
然后,您可以按照以下步骤进行操作:


首先,必须将字符串“7:00am”、“10:00pm”从当天转换为
NSDate
。这可以通过以下方法实现:

+(BOOL)timeCompare:(NSDate*)date1 until:(NSDate*)date2 withNow:(NSDate*)now{
    NSLog(@"TIMECOMPARE = open:%@ now:%@ close:%@", date1, now, date2);
    return ([date1 compare:now] == NSOrderedAscending && [date2 compare:now] == NSOrderedDescending);
}
- (NSDate *)todaysDateFromAMPMString:(NSString *)time
{
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    [fmt setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];

    // Get year-month-day for today:
    [fmt setDateFormat:@"yyyy-MM-dd "];
    NSString *todayString = [fmt stringFromDate:[NSDate date]];

    // Append the given time:
    NSString *todaysTime = [todayString stringByAppendingString:time];

    // Convert date+time string back to NSDate:
    [fmt setDateFormat:@"yyyy-MM-dd h:mma"];
    NSDate *date = [fmt dateFromString:todaysTime];
    return date;
}
然后,您可以按照以下步骤进行操作:


首先,必须将字符串“7:00am”、“10:00pm”从当天转换为
NSDate
。这可以通过以下方法实现:

+(BOOL)timeCompare:(NSDate*)date1 until:(NSDate*)date2 withNow:(NSDate*)now{
    NSLog(@"TIMECOMPARE = open:%@ now:%@ close:%@", date1, now, date2);
    return ([date1 compare:now] == NSOrderedAscending && [date2 compare:now] == NSOrderedDescending);
}
- (NSDate *)todaysDateFromAMPMString:(NSString *)time
{
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    [fmt setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];

    // Get year-month-day for today:
    [fmt setDateFormat:@"yyyy-MM-dd "];
    NSString *todayString = [fmt stringFromDate:[NSDate date]];

    // Append the given time:
    NSString *todaysTime = [todayString stringByAppendingString:time];

    // Convert date+time string back to NSDate:
    [fmt setDateFormat:@"yyyy-MM-dd h:mma"];
    NSDate *date = [fmt dateFromString:todaysTime];
    return date;
}
然后,您可以按照以下步骤进行操作:


首先,必须将字符串“7:00am”、“10:00pm”从当天转换为
NSDate
。这可以通过以下方法实现:

+(BOOL)timeCompare:(NSDate*)date1 until:(NSDate*)date2 withNow:(NSDate*)now{
    NSLog(@"TIMECOMPARE = open:%@ now:%@ close:%@", date1, now, date2);
    return ([date1 compare:now] == NSOrderedAscending && [date2 compare:now] == NSOrderedDescending);
}
- (NSDate *)todaysDateFromAMPMString:(NSString *)time
{
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    [fmt setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];

    // Get year-month-day for today:
    [fmt setDateFormat:@"yyyy-MM-dd "];
    NSString *todayString = [fmt stringFromDate:[NSDate date]];

    // Append the given time:
    NSString *todaysTime = [todayString stringByAppendingString:time];

    // Convert date+time string back to NSDate:
    [fmt setDateFormat:@"yyyy-MM-dd h:mma"];
    NSDate *date = [fmt dateFromString:todaysTime];
    return date;
}
然后,您可以按照以下步骤进行操作:



是的,像[date TimeIntervalence1970]这样的东西可以让一切变得简单。好吧,考虑到我所拥有的,我该如何实现这一点?最终的问题是哪一个关闭时间更晚,存储1还是存储2,所以只需取[date 1 TimeIntervalence1970]和[date 2 TimeIntervalence1970]的数值,然后看哪个更大。请注意,如果您比较
[date1 compare:date2]
或如果您比较相应的
时间间隔1970
值,则没有任何区别。好的,我需要确定的是“现在”是否在打开和关闭时间之间,但考虑到关闭时间是“am”那么它意味着第二天,而不是同一天。是的,类似于[date timeIntervalSince1970]的东西使一切变得简单。好吧,考虑到我所拥有的,我该如何实现这一点?最终的问题是哪一个关闭时间更晚,存储1还是存储2,所以你只需取[date 1 timeIntervalSince1970]和[date 2 timeIntervalSince1970]的数值,然后看哪个更大。请注意,如果您比较
[date1 compare:date2]
或如果您比较相应的
时间间隔1970
值,则没有任何区别。好的,我需要确定的是“现在”是否在打开和关闭时间之间,但考虑到关闭时间是“am”那么它意味着第二天,而不是同一天。是的,类似于[date timeIntervalSince1970]的东西使一切变得简单。好吧,考虑到我所拥有的,我该如何实现这一点?最终的问题是哪一个关闭时间更晚,存储1还是存储2,所以你只需取[date 1 timeIntervalSince1970]和[date 2 timeIntervalSince1970]的数值,然后看看哪个更大。注意,如果你比较的话,它不会有任何区别