NSDate返回不同​​的答案

时间:2013-12-30 23:01:12

标签: ios nsstring nsdate

我抓住当前日期并将其与预定义日期进行比较,但是我遇到的问题是字符串有时会有所不同。我的代码:

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];
}

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

干杯。

2 个答案:

答案 0 :(得分:2)

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

更新

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

答案 1 :(得分:0)

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

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"]) {
}

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