首页 文章

日历下的核心数据错误地比较日期

提问于
浏览
0

所以我似乎被iPhone的日历支持again灼伤了 . 我遇到了核心数据比较日期的问题 . 核心数据似乎是使用公历来存储日期,因为它们以20XX-MM-dd格式出现 . 但是当我以这种方式构建NSPredicate时

[nsRequest setPredicate:[NSPredicate predicateWithFormat:@"publish <= %@ AND expires >= %@", [NSDate date], [NSDate date]]]

如果用户的设备未设置为公历,则不会显示任何项目,因为在与输入日期进行比较之前,核心数据似乎不会将其本地化为NSDates .

因此,如果日期是今日'2011-05-31',日本日历模式核心数据似乎正在使用'0023-05-31',因为它是当前皇帝的第23年,将输入日期设置为大约2000年之前与之相比的是什么 .

我发现我可以解决这个问题

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:[[NSLocale preferredLanguages] objectAtIndex:0]] autorelease]];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZ"];
NSString *todayGregorian = [[dateFormat stringFromDate:[NSDate date]] retain];
[dateFormat release];

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZ"];
[nsRequest setPredicate:[NSPredicate predicateWithFormat:@"publish <= %@ AND expires >= %@", [df dateFromString:todayGregorian], [df dateFromString:todayGregorian]]];

但是我希望也许我是个白痴,而且还有更好的方法 . 有什么建议?

请注意:

  • 要求我的日语用户更改他们使用的日期格式不是一个选项 .

  • 此外,我仍然需要以格里高利格式存储核心数据日期,因为这些用户有时会来回更改日历 .


Real problem 我上面的解决方案是错误的 . TechZen的回答引起了我的注意,我希望我可以投票给他100次,我最终解决了这个问题 .

我的问题是服务器在GMT中发送到Core Data的数据和解析数据可能不一定在GMT中的formmater所以我需要调整正确进入Core Data的时间 .

1 回答

  • 2

    您真的别无选择,只能从NSDate转换为各种日历,特别是如果您的用户使用多个日历 .

    日历对象本身不是日期,而是专门的格式化程序 . 所有日期实际上都以GMT标准格式存储,无论它们来自哪个日历 . 然后根据需要将它们翻译/格式化为适当的日历 . 我们不会立即在针对西方人的应用中看到这一点,因为当代西方日历基于GMT,因此不需要翻译 .

    编程的日期和时间看似复杂 . 我们并不直觉觉得它很复杂,因为通常会为我们处理这么多繁重的工作 . 但是,当你开始做一些不寻常的事情时,复杂性因为显而易见 .

    根据经验,担心数据和时间编程的时间不是代码看起来很复杂但是看起来很简单的时候 .

相关问题