Iphone 是我的联系人';再过10天她就生日了
我正在计算我的通讯录中是否有联系人在未来10天内过生日。在线上有很多代码可以比较日期,但我只想比较日期和月份。例如,如果一个联系人出生于1960年1月5日(假设今天是2011年4月24日),那么我只想计算一下,离他们的生日只有六天了。谢谢你的帮助 检索联系人的生日后: 您需要调整年份组件: 然后,您可以计算到她生日的天数:Iphone 是我的联系人';再过10天她就生日了,iphone,sdk,nsdate,date,nscalendar,Iphone,Sdk,Nsdate,Date,Nscalendar,我正在计算我的通讯录中是否有联系人在未来10天内过生日。在线上有很多代码可以比较日期,但我只想比较日期和月份。例如,如果一个联系人出生于1960年1月5日(假设今天是2011年4月24日),那么我只想计算一下,离他们的生日只有六天了。谢谢你的帮助 检索联系人的生日后: 您需要调整年份组件: 然后,您可以计算到她生日的天数: 检索联系人的出生日期后: 您需要调整年份组件: 然后,您可以计算到她生日的天数: 将生日更改为今年(如果生日已经在今年,则更改为明年),并使用NSDATE组件和NSC
检索联系人的出生日期后: 您需要调整年份组件: 然后,您可以计算到她生日的天数:
将生日更改为今年(如果生日已经在今年,则更改为明年),并使用NSDATE组件和NSCalendar进行计算 看起来有点复杂,但你可以这样做:
NSDate *birthDay = ... // [calendar dateFromComponents:myBirthDay];
NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *thisYearComponents = [calendar components:NSYearCalendarUnit fromDate:[NSDate date]];
NSDateComponents *birthDayComponents = [calendar components:NSMonthCalendarUnit|NSDayCalendarUnit fromDate:birthDay];
[birthDayComponents setYear:[thisYearComponents year]];
NSDate *birthDayThisYear = [calendar dateFromComponents:birthDayComponents];
NSDateComponents *difference = [calendar components:NSDayCalendarUnit fromDate:[NSDate date] toDate:birthDayThisYear options:0];
if ([difference day] < 0) {
// this years birthday is already over. calculate distance to next years birthday
[birthDayComponents setYear:[thisYearComponents year]+1];
birthDayThisYear = [calendar dateFromComponents:birthDayComponents];
difference = [calendar components:NSDayCalendarUnit fromDate:[NSDate date] toDate:birthDayThisYear options:0];
}
NSLog(@"%i days until birthday", [difference day]);
NSDate*生日=…//[日历日期组件:我的生日];
NSCalendar*calendar=[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]自动释放];
NSDateComponents*thisYearComponents=[calendar components:NSYearCalendarUnit fromDate:[NSDate date]];
NSDateComponents*birthDayComponents=[日历组件:NSMonthCalendarUnit | NSDayCalendarUnit fromDate:birthDay];
[birthDayComponents setYear:[thisYearComponents year]];
NSDate*birthdaythisnear=[日历日期fromComponents:birthDayComponents];
NSDateComponents*差异=[calendar components:NSDayCalendarUnit fromDate:[NSDate date]toDate:birthDayThisYear选项:0];
如果([差异日]<0){
//今年的生日已经过去了。计算一下到明年生日的距离
[birthDayComponents setYear:[thisYearComponents year]+1];
birthDayThisYear=[CalendarDateFromComponents:birthDayComponents];
差异=[calendar components:NSDayCalendarUnit fromDate:[NSDate date]toDate:birthDayThisYear选项:0];
}
NSLog(@“%i天到生日,[差异日]);
将生日更改为今年(如果生日已在今年,则更改为明年),并使用NSDateComponents和NSCalendar进行计算
看起来有点复杂,但你可以这样做:
NSDate *birthDay = ... // [calendar dateFromComponents:myBirthDay];
NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *thisYearComponents = [calendar components:NSYearCalendarUnit fromDate:[NSDate date]];
NSDateComponents *birthDayComponents = [calendar components:NSMonthCalendarUnit|NSDayCalendarUnit fromDate:birthDay];
[birthDayComponents setYear:[thisYearComponents year]];
NSDate *birthDayThisYear = [calendar dateFromComponents:birthDayComponents];
NSDateComponents *difference = [calendar components:NSDayCalendarUnit fromDate:[NSDate date] toDate:birthDayThisYear options:0];
if ([difference day] < 0) {
// this years birthday is already over. calculate distance to next years birthday
[birthDayComponents setYear:[thisYearComponents year]+1];
birthDayThisYear = [calendar dateFromComponents:birthDayComponents];
difference = [calendar components:NSDayCalendarUnit fromDate:[NSDate date] toDate:birthDayThisYear options:0];
}
NSLog(@"%i days until birthday", [difference day]);
NSDate*生日=…//[日历日期组件:我的生日];
NSCalendar*calendar=[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]自动释放];
NSDateComponents*thisYearComponents=[calendar components:NSYearCalendarUnit fromDate:[NSDate date]];
NSDateComponents*birthDayComponents=[日历组件:NSMonthCalendarUnit | NSDayCalendarUnit fromDate:birthDay];
[birthDayComponents setYear:[thisYearComponents year]];
NSDate*birthdaythisnear=[日历日期fromComponents:birthDayComponents];
NSDateComponents*差异=[calendar components:NSDayCalendarUnit fromDate:[NSDate date]toDate:birthDayThisYear选项:0];
如果([差异日]<0){
//今年的生日已经过去了。计算一下到明年生日的距离
[birthDayComponents setYear:[thisYearComponents year]+1];
birthDayThisYear=[CalendarDateFromComponents:birthDayComponents];
差异=[calendar components:NSDayCalendarUnit fromDate:[NSDate date]toDate:birthDayThisYear选项:0];
}
NSLog(@“%i天到生日,[差异日]);
对您的联系人使用以下NSDate功能NSDate
- (NSTimeInterval)timeIntervalSinceNow
上述函数返回接收器与当前日期和时间之间的间隔。
NSTimeInterval interval = [date1 timeIntervalSinceNow:myContactDate];
NSTimeInterval
是以秒为单位的运行时间(以浮点数表示)。然后你可以除以86400,这是一天中的秒数,然后四舍五入到最接近的整数
NSInteger days = interval / 86400;
现在你有多少天了
编辑:
您还可以使用NSCalendar
和NSDateComponents
仅获取两个日期之间的日期组件
- (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts
使用以下代码作为参考。()
对您的联系人使用以下NSDate功能
NSDate
- (NSTimeInterval)timeIntervalSinceNow
上述函数返回接收器与当前日期和时间之间的间隔。
NSTimeInterval interval = [date1 timeIntervalSinceNow:myContactDate];
NSTimeInterval
是以秒为单位的运行时间(以浮点数表示)。然后你可以除以86400,这是一天中的秒数,然后四舍五入到最接近的整数
NSInteger days = interval / 86400;
现在你有多少天了
编辑:
您还可以使用NSCalendar
和NSDateComponents
仅获取两个日期之间的日期组件
- (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts
使用以下代码作为参考。()
好极了谢谢你。这很好用。谁会想到这么简单的事情需要这么多的工作。如果你想把它做好,所有与日期相关的事情都需要大量的代码。这就是为什么在时区、夏令时、闰年等方面存在如此多的bug。(是的,我看了你86400个用户。)我们可以很高兴我们有了NSDateComponents和NSCalendar,否则你可能需要20倍的代码。哦,顺便说一句,不要删除
if([difference day]<0)
部分,即使你认为你对未来几年的生日不感兴趣。事实上,至少在一年的最后10天,你对一年前10天的生日感兴趣。我花了点时间才弄明白。太棒了!谢谢你。这很好用。谁会想到这么简单的事情需要这么多的工作。如果你想把它做好,所有与日期相关的事情都需要大量的代码。这就是为什么在时区、夏令时、闰年等方面存在如此多的bug。(是的,我看了你86400个用户。)我们可以很高兴我们有了NSDateComponents和NSCalendar,否则你可能需要20倍的代码。哦,顺便说一句,如果([差异日]<0),不要删除)<