你知道如何知道两个NSDate
是同一天吗?我要考虑到区域...如何知道两个NSDate是否在同一天
它可以很容易使用timeIntervalSinceDate:
但周一23H58和周二00H01不在同一天...
与NSDate
和语言环境进行计算处理是不是很容易。
你知道如何知道两个NSDate
是同一天吗?我要考虑到区域...如何知道两个NSDate是否在同一天
它可以很容易使用timeIntervalSinceDate:
但周一23H58和周二00H01不在同一天...
与NSDate
和语言环境进行计算处理是不是很容易。
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *componentsForFirstDate = [calendar components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:firstDate];
NSDateComponents *componentsForSecondDate = [calendar components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:secondDate];
if ([componentsForFirstDate year] == [componentsForSecondDate year])
等
我不知道是否会isEquals
你想上什么NSDateComponents
。
使用NSCalendar和NSDateComponents为:
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *comps1 = [cal components:(NSMonthCalendarUnit| NSYearCalendarUnit | NSDayCalendarUnit)
fromDate:date1];
NSDateComponents *comps2 = [cal components:(NSMonthCalendarUnit| NSYearCalendarUnit | NSDayCalendarUnit)
fromDate:date2];
BOOL sameDay = ([comps1 day] == [comps2 day]
&& [comps1 month] == [comps2 month]
&& [comps1 year] == [comps2 year]);
与NSDateFormatter开始:
NSDateFormatter *_df = [[NSDateFormatter alloc] init];
_df.dateFormat = @"yyyy.MM.dd";
NSString *_d1 = [_df stringFromDate:_date1];
NSString *_d2 = [_df stringFromDate:_date2];
if ([_d1 isEqualToString:_d2] == YES)
{
// d1 and d2 is on same day/month/year
}
[_df release];
设置的timeZone如果日期是不是系统区域设置。
NSCalendar *calendar = [NSCalendar currentCalendar];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:self.cityData.timeZone];
[calendar setTimeZone:timeZone];
NSDateComponents *componentsForFirstDate = [calendar components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:weatherDataDate];
NSDateComponents *componentsForSecondDate = [calendar components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:yesterday];
if ([componentsForFirstDate day] == [componentsForSecondDate day]) {
// TODO:
}
斯威夫特:
func isSameDays(date1:NSDate, _ date2:NSDate) -> Bool {
let calendar = NSCalendar.currentCalendar()
var comps1 = calendar.components([NSCalendarUnit.Month , NSCalendarUnit.Year , NSCalendarUnit.Day], fromDate:date1)
var comps2 = calendar.components([NSCalendarUnit.Month , NSCalendarUnit.Year , NSCalendarUnit.Day], fromDate:date2)
return (comps1.day == comps2.day) && (comps1.month == comps2.month) && (comps1.year == comps2.year)
}
如果您的应用程序将会在OS X 10.9+或iOS上运行8+只有,你可以使用NSCalender
新的API。
/*
This API compares the given dates down to the given unit, reporting them equal if they are the same in the given unit and all larger units.
*/
- (BOOL)isDate:(NSDate *)date1 equalToDate:(NSDate *)date2 toUnitGranularity:(NSCalendarUnit)unit NS_AVAILABLE(10_9, 8_0);
还有很多方便的API。但是,苹果并没有在他们的文档中提到它们。无论如何,这些API是公开的,您可以使用它们。
由于iOS 8的这个很简单:
let isSameDay = NSCalendar.currentCalendar().isDate(date1, inSameDayAsDate: date2)
并且变得稍微简单但与夫特3:
let isSameDay = Calendar.current.isDate(date1, inSameDayAs: date2)
[NSCalendar currentCalendar]是十分缓慢的,所以如果可能的缓存它。 – 2011-04-29 15:38:00
感谢您的回答。 “缓存”currentCal是什么意思?我把它放在一个单身人士? – iwalktheline 2011-04-29 16:08:33
或者在NSCalendar上创建一个类别,将currentCalendar的结果存储为一个静态变量。 – 2011-04-29 19:49:12