Я уже некоторое время просматриваю документы Apple и стекопотока, но не смог найти правильный ответ для своей проблемы.Я постараюсь объяснить.В моем приложении пользователь может создавать измерения в определенное время.Дата и время измерения важны.
В моей категории NSDate + Helper я создал следующие вспомогательные методы:
- (NSDate *)dateByMovingToBeginningOfDay
{
unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents* parts = [[NSCalendar currentCalendar] components:flags fromDate:self];
[parts setHour:0];
[parts setMinute:0];
[parts setSecond:0];
return [[NSCalendar currentCalendar] dateFromComponents:parts];
}
- (NSDate *)dateByMovingToEndOfDay {
unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents* parts = [[NSCalendar currentCalendar] components:flags fromDate:self];
[parts setHour:23];
[parts setMinute:59];
[parts setSecond:59];
return [[NSCalendar currentCalendar] dateFromComponents:parts];
}
Этот метод помогает мне получить диапазон измерений отполный день:
NSDate *start = [[NSDate date] dateByMovingToBeginningOfDay];
NSDate *end = [[NSDate date] dateByMovingToEndOfDay];
NSMutableSet *measurementsSet = [trainingsPlan measurementsWithType:@"used" fromDate:start andToDate:end];
Вот в чем заключается моя проблема. Допустим, я добавил измерение на моем симуляторе на 2012-03-14 0:42:59 (GMT+1)
, потому что это время, отображаемое на моем симуляторе, и сохранил его в основных данных.
[NSDate date]
на данный момент равен 2012-03-13 23:42:59
, поэтому NSDate *start = [[NSDate date] dateByMovingToBeginningOfDay];
дает мне дату начала предыдущего дня.Это проблема.
Мой вопрос, каков наилучший подход, который будет работать для пользователей во всех разных часовых поясах?