Получение NSDate на сегодня с 00:00:00 в качестве времени

Я пишу категорию в 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
6
задан Wim Haanstra 3 November 2010 в 22:25
поделиться

0 ответов