【问题标题】:NSDate returns different answersNSDate 返回不同的答案
【发布时间】:2013-12-30 23:01:12
【问题描述】:

我正在获取当前日期并将其与预定义日期进行比较,但是我遇到了字符串有时不同的问题。我的代码:

NSDate *todaysDate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
NSString *dateToday = [dateFormatter stringFromDate:todaysDate];
NSLog(@"%@", dateToday);

有时我会收到“2013 年 12 月 30 日” - 有时会收到“2013 年 12 月 30 日”(没有逗号),有时会收到“2013 年 12 月 30 日”。我不明白为什么会发生这种情况。

有什么想法吗?

编辑:回答提出的问题。我只是想查看当前日期是否与预定义日期相同,或者是否超出该日期。我的代码是:

if ([dateToday  isEqual: @"30 Dec 2013"]) {
    //It's the day of the event, run the day view
    [self performSegueWithIdentifier:@"mainToDay" sender:self];
} else if ([todaysDate timeIntervalSinceDate:postEventDate] > 0) {
    //It's after the event, run the post event screen
    [self performSegueWithIdentifier:@"mainToPost" sender:self];
}

我只是使用日志来查看返回的内容然后模拟它。我没有意识到它会改变。 :)

干杯。

【问题讨论】:

  • 您的预定义日期是什么形式的?比较字符串可能不是最好的方法。但如果你这样做了,你至少应该使用明确的日期格式和明确的语言环境,以确保结果一致。
  • 您最好使用NSDateComponents 构造第二个日期 - 并比较NSDates,而不是它们的字符串表示(如果您对两个日期使用相同的固定格式,您也可以比较字符串表示) .见stackoverflow.com/a/1563874/653513
  • 我根据您的更新更新了我的答案

标签: ios nsstring nsdate


【解决方案1】:

如果测试设备的语言或区域设置发生变化,可能会发生这种情况,但在没有变化时应该保持一致。

更新

检查these libraries 中的一些功能,让您的生活更轻松。我在我的应用程序中使用 Erica Saduns。她有一个isEqualToDateIgnoringTime,看起来和你要找的完全一样。

【讨论】:

  • 啊,好吧,有没有更具体的方法来做到这一点?
【解决方案2】:

使用日期样式将根据用户的区域设置和语言生成许多可能的字符串之一。有更好的方法。如果您真的想与硬编码的日期字符串进行比较,请至少执行以下操作:

NSDate *todaysDate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString *dateToday = [dateFormatter stringFromDate:todaysDate];

if ([dateToday isEqualToString:@"2013-12-30"]) {
}

这可确保格式一致并消除任何特定语言的文本。

【讨论】:

    猜你喜欢
    • 2015-05-18
    • 1970-01-01
    • 2015-06-30
    • 2022-12-17
    • 1970-01-01
    • 2018-06-04
    • 2016-06-13
    • 1970-01-01
    • 2016-05-28
    相关资源
    最近更新 更多