我真的非常难以理解真正简单的东西。我的应用程序的一个功能是每月重复事件,所以我需要一个日期,添加一个月,并存储它。我每个月都会重复一遍。CoreData&NSDate - 日期存储在2015年落后1天
我遇到的问题是我在测试时发现,当日期到2015年3月失去一天 - 所以3月22日变成3月21日... 4月... 5月等等。甚至陌生人事情一旦我从2016年3月份开始,它就会转回到第22位 - 不再错过一天。
据我所知,它不能是夏令时,因为它发生在12个月的时期,或闰年,因为2015年不是闰年。
我正在使用MagicalRecord来帮助CoreData,我敢肯定它可能与CoreData本身有关?这里的所谓的更新日期的简单代码:
// create date if we haven't already
if (!_dateEntity.theDate) {
NSDate *date = [NSDate date];
_dateEntity.theDate = date;
}
NSLog(@"date before update - %@", _dateEntity.theDate);
// add a month to it
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setMonth:1];
_dateEntity.theDate = [calendar dateByAddingComponents:components toDate:_dateEntity.theDate options:0];
NSLog(@"date after update - %@ \n ***** \n", _dateEntity.theDate);
// save the context
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {
if (success) {
//NSLog(@"You successfully saved your context.");
} else if (error) {
//NSLog(@"Error saving context: %@", error.description);
}
}];
这是半须藤代码,从实际项目中剥离出来成为一个独立的项目只是为了测试(!以确保我不会疯)
这里(的要求)是原木的Xcode:
2014-07-23 10:48:55.001 dateTest[52136:60b] date before update - 2014-07-23 09:48:54 +0000
2014-07-23 10:48:55.003 dateTest[52136:60b] date after update - 2014-08-23 09:48:54 +0000
*****
2014-07-23 10:48:59.994 dateTest[52136:60b] date before update - 2014-08-23 09:48:54 +0000
2014-07-23 10:48:59.995 dateTest[52136:60b] date after update - 2014-09-23 09:48:54 +0000
*****
2014-07-23 10:49:04.685 dateTest[52136:60b] date before update - 2014-09-23 09:48:54 +0000
2014-07-23 10:49:04.686 dateTest[52136:60b] date after update - 2014-10-23 09:48:54 +0000
*****
2014-07-23 10:49:08.127 dateTest[52136:60b] date before update - 2014-10-23 09:48:54 +0000
2014-07-23 10:49:08.128 dateTest[52136:60b] date after update - 2014-11-23 10:48:54 +0000
*****
2014-07-23 10:49:12.594 dateTest[52136:60b] date before update - 2014-11-23 10:48:54 +0000
2014-07-23 10:49:12.595 dateTest[52136:60b] date after update - 2014-12-23 10:48:54 +0000
*****
2014-07-23 10:49:16.014 dateTest[52136:60b] date before update - 2014-12-23 10:48:54 +0000
2014-07-23 10:49:16.015 dateTest[52136:60b] date after update - 2015-01-23 10:48:54 +0000
*****
2014-07-23 10:49:20.188 dateTest[52136:60b] date before update - 2015-01-23 10:48:54 +0000
2014-07-23 10:49:20.189 dateTest[52136:60b] date after update - 2015-02-23 10:48:54 +0000
*****
2014-07-23 10:49:32.956 dateTest[52136:60b] date before update - 2015-02-23 10:48:54 +0000
2014-07-23 10:49:32.957 dateTest[52136:60b] date after update - 2015-03-23 10:48:54 +0000
*****
2014-07-23 10:49:44.061 dateTest[52136:60b] date before update - 2015-03-23 10:48:54 +0000
2014-07-23 10:49:44.061 dateTest[52136:60b] date after update - 2015-04-23 09:48:54 +0000
*****
从日志中,一切都看起来不错 - 还是在23日(今天)。但是,如果我实际查看数据库本身,则最后两个日期2015-03-23和2015-04-23分别显示为2015-03-22和2015-04-22。
在数据库中的最新更新,如图中的SQL浏览器: 2015年4月22日10时48分54秒
他们将这样的表现,直到2016年3月,在这一点上,他们会去回到正确存储。这是我真的不明白的一点。
任何人都曾经历过类似的事情?我现在正在撕掉我的头发
可否请您在添加月份前后登录您的'_dateEntity.theDate',然后将结果作为更新添加到帖子中? – Lebyrt
当然,只是为你做。谢谢你的帮助! –
请问您可以发布2015-03-23和2015-04-23最后两个日期,因为它们出现在数据库中,但也包含时间和时区? – Lebyrt