Я действительно озадачен тем, что должно быть чем-то действительно простым. Особенностью моего приложения является ежемесячно повторяющиеся события, поэтому мне нужно взять дату, добавить к ней месяц и сохранить ее. Каждый месяц я повторяю это.
Проблема, с которой я столкнулся, заключается в том, что во время тестирования я обнаружил, что когда дата выходит за март 2015 года, она теряет день, поэтому 22 марта становится 21 марта... апреля... мая и т. д. Еще более странная вещь - это когда я чтобы пройти март 2016 года, он просто переключается обратно на 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);
}
}];
Это код наполовину sudo, выделенный из реального проекта в отдельный проект только для тестирования (чтобы убедиться, что я не сойду с ума!)
Вот (по запросу) логи из 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/04/22 10:48:54
Они будут вести себя так до марта 2016 года, после чего они вернутся к правильному хранению. Это то, что я действительно не понимаю.
Кто-нибудь когда-нибудь испытывал что-то подобное? Я рву на себе волосы прямо сейчас
_dateEntity.theDate
до и после добавления месяца, а затем добавить результаты в качестве обновления к сообщению? - person Lebyrt   schedule 23.07.2014