【问题标题】:How to test if today is not after a specific date?如何测试今天是否不在特定日期之后?
【发布时间】:2014-07-29 02:55:03
【问题描述】:

在 Objective-C 中,如何测试今天是否不是在特定日期之后?

我正在使用以下方式,但我很好奇是否有更好的方式或其他替代方法来解决这个问题。

NSString *dateString = @"20140928";
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyyMMdd"];
NSDate *expirationDate = [dateFormat dateFromString:dateString];
NSDate *today = [NSDate date];
if ([today laterDate:expirationDate] != today) {
    NSLog(@"Today is not after expirationDate");
}

【问题讨论】:

  • 差不多就是这样。实际比较有几种不同的方法,您可能希望也可能不希望以一种或另一种方式捏造时间值,以便在比赛的一整天中比较是真还是假直到当前时间。

标签: objective-c date nsdate


【解决方案1】:

您的大部分代码都获得了到期日期,因此这并不算数。

获得日期后,使用laterDate:compare:[NSDate date] 是两种简单的方法。

你也可以这样做:

if ([expirationDate timeIntervalSinceNow] > 0) {
    // expiration date is after "now"
}

这避免了使用[NSDate date]

【讨论】:

  • 我喜欢不需要创建另一个日期的事实。谢谢。
【解决方案2】:

作为替代方案:

if ([today compare:expirationDate] == NSOrderedAscending)
    // expirationDate comes "after" today

if ([today compare:expirationDate] == NSOrderedDescending)
    // expirationDate comes "before" today

if ([today compare:expirationDate] == NSOrderedSame)
    // expirationDate equals today

【讨论】:

  • “等于今天”它不太可能发生并且具有误导性。这意味着它们是同一天同一时间。
  • 是的,Bryan,你是对的(嗯,两个比较的日期实例是相同的)。让我们把它留给开发人员和其他可能从代码 sn-p 中受益的人自己决定它有多大用处,好吗?巨魔...
猜你喜欢
  • 1970-01-01
  • 2022-11-12
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 2019-06-10
  • 1970-01-01
  • 1970-01-01
  • 2016-10-17
相关资源
最近更新 更多