2013-08-13 1 views
1

Моя цель - получить NSDate, представляющий тот же день, что и другой NSDate, но с часами, минутами, секундами, установленными в 0.Ошибка компонентов экстракта NSDate - не в тот же день?

Итак, 2013/11/27 13:23:32 станет 2013/11/27 00:00:00.

Я сделал эту функцию, для которой я нашел примеры в Интернете

+ (NSDate*)dayEarliestDateForDate:(NSDate*)date { 
    NSCalendar* calendar = [NSCalendar currentCalendar]; 
    NSDateComponents* comps = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date]; 
    [comps setHour:0]; 
    [comps setMinute:0]; 
    [comps setSecond:0]; 
    NSDate* dateEarliest = [calendar dateFromComponents:comps]; 
    return dateEarliest; 
} 

Но странно, когда я запускаю его

NSDate* date2 = [NSDate dayEarliestDateForDate:date1]; 

я получаю это:

(lldb) po date1 
$3 = 0x11d98dc0 2013-08-**13** 07:37:58 +0000 
(lldb) po date2 
$4 = 0x140588f0 2013-08-**12** 22:00:00 +0000 

As видите ли, день изменился!

Любые идеи? Спасибо

+1

Это правильная дата * в вашем часовом поясе * (GMT + 2 справа?) – borrrden

ответ

1

Ludovic, поскольку NSDate является единственным «моментом на временной шкале», когда вы делаете NSLog в NSDate, он печатает его с часовым поясом времени в Гринвиче (то есть +0000 после времени) - и поскольку вы не определили какой-либо часовой пояс для своего объекта NSDateComponentscomps, он просто преобразуется в NSDate с использованием GMT +0, и вы, вероятно, находитесь в зоне GMT ​​+2.

Чтобы исправить это, я предлагаю вам установить часовой пояс вашего NSDateComponents для объекта.

[comps setTimeZone:[NSTimeZone localTimeZone]]; 

или установить желаемый часовой пояс, если он не является местным.

 Смежные вопросы

  • Нет связанных вопросов^_^