是的,这类似于NSDate beginning of day 和 end of day,但是该主题并未讨论它是否适用于我在这里要问的所有情况。这个问题涉及到没有取回正确的值,因为他们忘记了 NSDayCalendarUnit。这个问题正在处理值的准确性,事实证明它不会像我所怀疑的那样与 DST 一起使用。
在我的应用程序的几个部分中,我需要指定一天中的某个时间而不关心实际的一天,例如,每天下午 4:00 执行此活动。我看过一些关于如何做到这一点的帖子,但希望得到有关我的方法的反馈。下面的方法旨在返回任何特定日期的午夜,并将与表示特定时间(例如,凌晨 1:00:00 为 3600)的秒数的偏移量结合使用。
我相信它应该可以工作,但很好奇它是否能处理诸如夏令时之类的极端情况。对于任何反馈,我们都表示感谢。谢谢!
// We want to return 12:00:00AM of the day represented by the time interval
NSTimeInterval getStartOfDay(NSTimeInterval t)
{
// first convert the time interval to an NSDate
NSDate *ourStartingDate = [NSDate dateWithTimeIntervalSinceReferenceDate:t] ;
// get just the year, month, and day of our date
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps = [gregorian components:unitFlags fromDate:ourStartingDate];
NSDate *ourConvertedDate = [gregorian dateFromComponents:comps] ;
// put that date into a time interval
NSTimeInterval convertedInterval = [ourConvertedDate timeIntervalSinceReferenceDate] ;
// because the time interval is in GMT and we may not be, we need to get an offset
NSInteger timeZoneOffset = [[NSTimeZone localTimeZone ] secondsFromGMT] ;
// account for the time zone difference
convertedInterval = convertedInterval - timeZoneOffset ;
// still might have a Daylight Savings Time issue?
return convertedInterval ;
}