Я пишу категорию в Xcode, которая расширит текущий класс NSDate. Я хочу добавить два метода, которые я использую регулярно, но почему-то не могу заставить их работать должным образом.
В настоящее время у меня есть этот код:
+ (NSDate*) today
{
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *todayComponents = [gregorian components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:[NSDate date]];
NSInteger theDay = [todayComponents day];
NSInteger theMonth = [todayComponents month];
NSInteger theYear = [todayComponents year];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:theDay];
[components setMonth:theMonth];
[components setYear:theYear];
NSDate* todayDate = [gregorian dateFromComponents:components];
[components release];
[gregorian release];
return todayDate;
}
Я хочу, чтобы он возвращал дату, подобную этой: «2010-11-03 00:00:00 +01 ». Но почему-то часовой пояс не дает мне покоя, потому что этот код возвращает «2010-11-02 23:00:00 +0000».
Кто-нибудь может сказать мне, как исправить этот код, чтобы на самом деле возвращать правильную дату? Или я могу просто использовать эту дату, и мое приложение само ее преобразует из-за часового пояса, установленного на машине.
Я должен регистрировать определенные события в моем приложении в базе данных, который также просто использует метод [NSDate date]. Означает ли это, что метод [NSDate date] также использует время без информации о часовом поясе?
EDIT: Я думаю, это как-то связано с ошибкой перехода на летнее время. То, что я вижу, точно такое же, как и в приложении Clock, с ошибкой, из-за которой люди просыпаются поздно. Кроме того, часовой пояс по умолчанию соответствует часовому поясу, установленному в настоящее время на вашем устройстве, поэтому он должен оставаться неизменным, пока вы не измените часовой пояс на экране настроек.
EDIT2: Хорошо, еще несколько тестов:
NSLog(@"CurrentDate: %@", [NSDate date]);
NSLog(@"TZ: %@", [NSTimeZone defaultTimeZone]);
Дает мне следующие результаты:
2010-11-03 23:23:49.000 App[8578:207] CurrentDate: 2010-11-03 22:23:49 +0000
2010-11-03 23:23:49.001 App[8578:207] TZ: Europe/Amsterdam (GMT+01:00) offset 3600