1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
// [ NSTimer scheduledTimerWithTimeInterval : 1 .0 target : self selector : @selector (timerFireMethod:) userInfo :nil repeats : YES ]; // - ( void )timerFireMethod:( NSTimer *)theTimer { BOOL timeStart = YES ; NSCalendar *cal = [ NSCalendar currentCalendar ]; //定义一个NSCalendar对象 NSDateComponents *endTime = [[ NSDateComponents alloc ] init ]; //初始化目标时间... NSDate *today = [ NSDate date ]; //得到当前时间 NSDateFormatter *dateFormatter = [[ NSDateFormatter alloc ] init ]; [dateFormatter setDateFormat : @"yyyy-MM-dd HH:mm:ss" ]; NSDate *dateString = [dateFormatter dateFromString :todate]; NSString *overdate = [dateFormatter stringFromDate :dateString]; // NSLog(@"overdate=%@",overdate); static int year; static int month; static int day; static int hour; static int minute; static int second; if (timeStart) { //从NSDate中取出年月日,时分秒,但是只能取一次 year = [[overdate substringWithRange :NSMakeRange( 0 , 4 )] intValue ]; month = [[overdate substringWithRange :NSMakeRange( 5 , 2 )] intValue ]; day = [[overdate substringWithRange :NSMakeRange( 8 , 2 )] intValue ]; hour = [[overdate substringWithRange :NSMakeRange( 1 1 , 2 )] intValue ]; minute = [[overdate substringWithRange :NSMakeRange( 1 4 , 2 )] intValue ]; second = [[overdate substringWithRange :NSMakeRange( 1 7 , 2 )] intValue ]; timeStart= NO ; } [endTime setYear :year]; [endTime setMonth :month]; [endTime setDay :day]; [endTime setHour :hour]; [endTime setMinute :minute]; [endTime setSecond :second]; NSDate *overTime = [cal dateFromComponents :endTime]; //把目标时间装载入date //用来得到具体的时差,是为了统一成北京时间 unsigned int unitFlags = NSYearCalendarUnit| NSMonthCalendarUnit| NSDayCalendarUnit| NSHourCalendarUnit| NSMinuteCalendarUnit| NSSecondCalendarUnit ; NSDateComponents *d = [cal components :unitFlags fromDate :today toDate :overTime options : 0 ]; NSString *t = [ NSString stringWithFormat : @"%d" , [d day ]]; NSString *h = [ NSString stringWithFormat : @"%d" , [d hour ]]; NSString *fen = [ NSString stringWithFormat : @"%d" , [d minute ]]; if ([d minute ] < 1 0 ) { fen = [ NSString stringWithFormat : @"0%d" ,[d minute ]]; } NSString *miao = [ NSString stringWithFormat : @"%d" , [d second ]]; if ([d second ] < 1 0 ) { miao = [ NSString stringWithFormat : @"0%d" ,[d second ]]; } // NSLog(@"===%@天 %@:%@:%@",t,h,fen,miao); [_longtime setText :[ NSString stringWithFormat : @"%@天 %@:%@:%@" ,t,h,fen,miao]]; if ([d second ] > 0 ) { //计时尚未结束,do_something // [_longtime setText:[NSString stringWithFormat:@"%@:%@:%@",d,fen,miao]]; } else if ([d second ] == 0 ) { //计时结束 do_something } else { //计时器失效 [theTimer invalidate ]; } } |