2012-05-30 98 views
1

我有一個字符串,時間如下;計算2個時間間隔之間的時間差 - 邏輯問題

NSString *time = "06.45 pm"; 

我需要假設這個時間是今天的日期,然後得到當前系統時間,並計算兩者之間的時間差。

我該怎麼做?

注:以上時間不指定date,(只有時間給出)

+0

當前系統時間是一個確切的時間點 - 它包括秒,一天,一個月和一年。你希望這個字符串代表什麼時候下午六點四十五分在你做數學的時候,或者什麼? –

+0

下午6.45應該是今天的日期。因此計算從當前時間到下午6時45分的時差。我需要使用'timeIntervalSinceDate:',但我不知道如何獲得時間差。 –

+0

你怎麼知道你給的'時間'與當前系統時間是同一日期。 – HelmiB

回答

3
NSString *time = @"06.45 pm"; 

NSDate *date1; 
NSDate *date2; 
{ 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"hh.mm a"]; 
    date1 = [formatter dateFromString:time]; 
    date2 = [formatter dateFromString:[formatter stringFromDate:[NSDate date]]]; 
    [formatter release]; 
} 
NSTimeInterval interval = [date1 timeIntervalSinceDate: date2];//[date1 timeIntervalSince1970] - [date2 timeIntervalSince1970]; 
int hour = interval/3600; 
int minute = (int)interval % 3600/60; 

NSLog(@"%@ %dh %dm", interval<[email protected]"-":@"+", ABS(hour), ABS(minute)); 
+0

你爲什麼要計算並用手格式化的結果?使用'timeIntervalSinceDate:'和另一個日期格式化程序。 –

+0

是的,你的解決方案可以工作。但是我怎麼能在你給出的例子中使用'timeIntervalSinceDate'? –

+0

我編輯它。謝謝;-) – Joey

2

確保當你這樣做,你使用的是日曆的操作,使得考慮到時間更改(夏時制,閏秒等):

NSString *time = @"06.45 pm"; 
NSCalendar *cal = [NSCalendar currentCalendar]; 
NSDate  *today = [NSDate date]; 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"hh.mm a"]; 

// Convert time to a NSDate and break it down into hours, minutes, and seconds: 
NSDate   *timeAsDate = [formatter dateFromString:time]; 
NSDateComponents *timeComps = [cal components:NSHourCalendarUnit | 
               NSMinuteCalendarUnit | 
               NSSecondCalendarUnit 
             fromDate:timeAsDate]; 

// Take today's date and add "time" to it: 
NSDateComponents *comps = [cal components:NSYearCalendarUnit | 
              NSMonthCalendarUnit | 
              NSDayCalendarUnit 
            fromDate:today]; 
comps.hour    = timeComps.hour; 
comps.minute    = timeComps.minute; 
comps.second    = timeComps.second; 
NSDate *timeOnTodaysDate = [cal dateFromComponents:comps]; 

// Now calculate the difference: 
NSTimeInterval difference = [today timeIntervalSinceDate:timeOnTodaysDate]; 
+0

這有什麼好運氣? – lnafziger