-3

我想要一个倒计时,显示日,小时,M 和 S。一秒钟被称为一次。

- (void)changetime {     

    NSCalendar *cal = [NSCalendar currentCalendar];//定义一个NSCalendar对象                 
    NSDate *today = [NSDate date];//得到当前时间

    unsigned int unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
    NSDateComponents *weekdayComponents =[cal components:(unitFlags) fromDate:self.overDate]; 
    NSDate *todate = [cal dateFromComponents:weekdayComponents]; 
    NSDateComponents *d = [cal components:unitFlags fromDate:today toDate:todate options:0];

    NSInteger days=[d year]*365+[d month]*31+[d day];
    if ([self.overDate earlierDate:[NSDate date]]==self.overDate) {
        [myTimer invalidate];
        myTimer=nil;
        self.labdate.text = [NSString stringWithFormat:@"%d天%d时%d分%d秒",days, [d hour], [d minute], [d second]];
        return;
    }    
    self.labdate.text = [NSString stringWithFormat:@"%d天%d时%d分%d秒",days, [d hour], [d minute], [d second]];     
}

myTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(changetime) userInfo:nil repeats:YES];

self.overDate=[wedding date];//this is a future time
4

1 回答 1

2

以下行应该引起您的警报:

NSInteger days=[d year]*365+[d month]*31+[d day];

一年只有 365 天~75% 的时间在公历中。将近 50% 的月份在该日历中没有 31 天。查看 Apple 文档中的Date Calculations部分,该部分告诉您,如果您在components:fromDate:toDate:options:通话中要求 Day 组件并且没有更大的内容,您将获得考虑日历所需的天数。

于 2012-07-18T08:01:33.113 回答