2013-05-19 1 views
1

как я могу рассчитать NSTimeInterval сегодняшнего дня с часами минут и секунд до нуля?NSTimeInterval сегодняшнего дня с нулевым временем (полночь)

я знаю, что NSTimeInterval сегодня это так:

NSTimeInterval today = [[NSDate date] timeIntervalSince1970]; 

, но как я могу сбросить время?

+1

Относительно чего? – Wain

+0

что? ... у меня есть nstimeinterval сегодняшнего дня, но я хочу установить его сегодня до 00:00:00 времени ... – Piero

ответ

1
NSDate *currentDate = [NSDate date]; 
NSDateComponents *currentDateComponents = [calendar components:NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:currentDate]; 
NSDateComponents *currentDateToMidnight = [[NSDateComponents alloc] init]; 
[currentDateToMidnight setHour:-[currentDateComponents hour]]; 
[currentDateToMidnight setMinute:-[currentDateComponents minute]]; 
[currentDateToMidnight setSecond:-[currentDateComponents second]]; 
NSDate *midnight = [calendar dateByAddingComponents:currentDateToMidnight toDate:currentDate options:0]; 
NSTimeInterval todayTimeInterval = [midnight timeIntervalSince1970]; 
+0

Это немного перебор, не так ли? Просто установите час, минуту и ​​секунду «currentDateComponents» равным 0 и спросите календарь, что будет «NSDate». – JustSid

0

Вы должны использовать NSDateComponents получить только год, месяц и день сегодня, то вы можете создать дату из них, которая будет в полночь.

0

После того как вы NSTimeInterval из now вызвать следующую функцию:

inline NSTimeInterval trimTimeInterval(NSTimeInterval interval) 
{ 
    static NSTimeInterval const day = 3600 * 24; 
    return day * floor(interval/day); 
} 

Сначала мы вычисляем количество целых дней в interval, а затем получить то же значение обратно, за исключением элемента времени.

Обратите внимание, что этот код не учитывает часовой пояс. Таким образом, вы можете получить 23 мая вместо 24 мая для GMT + N> 0.