如何拆分包含时间值的字符串并将其转换为查找差异

时间:2014-10-03 14:06:21

标签: ios objective-c iphone

注意:我已经使用共享知识功能作为一个整体来回答这个问题而不仅仅是一个常见的问题 - "分裂字符串"

我遇到的两个问题但从未在一起:

如何拆分字符串? (我承认这个问题已被回答了几次)

如何计算2次作为字符串之间的差异并以时间格式(00:00:00)显示?

这个问题的目的是帮助存储时间的人是核心数据中的字符串,以便能够计算两者之间的差异。我使用了"分享知识"功能回答这个问题,并没有简单回答。请看下面。

2 个答案:

答案 0 :(得分:1)

由于您来自字符串,因此您需要将它们更改为NSDate对象。您将使用格式化程序来执行此操作。

NSDateFormatter *df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"HH:mm:ss"];  
// I don't know what date format you're coming from, you should of course use yours. check out the doc for more info.
NSDate *date1 = [dateFormat dateFromString:string1]; 
NSDate *date2 = [dateFormat dateFromString:string2]; 

现在您有来自字符串的日期对象。 如果您想知道时间日期之间的时间(以秒或其他为单位)

(来自this post

 NSTimeInterval distanceBetweenDates = [date1 timeIntervalSinceDate:date2];
 double secondsInAnHour = 3600;
 NSInteger hoursBetweenDates = distanceBetweenDates / secondsInAnHour;

NSTimeInterval以秒为单位为您提供差异,您可以从那里计算您是否需要小时,天等等。

但有时,您可能只需要知道日期是在另一个之前还是之后。然后你应该使用date compare,它返回一个NSOrderingDesc或Asc或Same,如下所示:

//Then the comparison will tell which is earlier/later/same:

if ([date1 compare:date2] == NSOrderedDescending) {
    NSLog(@"date1 is later than date2");
} else if ([date1 compare:date2] == NSOrderedAscending) {
    NSLog(@"date1 is earlier than date2");
} else {
    NSLog(@"dates are the same");
}

答案 1 :(得分:0)

首先我们建立日期的格式。我正在使用HH:MM:SS格式。将您的格式设置为适合您保存的字符串。

NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
    [dateFormat setDateFormat:@"HH:mm:ss"];

第二部分是引用你的字符串。我创建一个新的引用只是为了在将String Date转换为NSDate时保持整洁。在我的例子中,我在我的.h文件中声明了对Core Data的引用,因此我引用如下。

NSString * StringTime1 = self.coreDataReference.time1;
NSString * StringTime2 = self.coreDataReference.time2;

将字符串转换为日期:

NSDate *time1 = [dateFormat dateFromString:StringTime1];
NSDate *time2 = [dateFormat dateFromString:StringTime2];

我接下来通过获取时间之间的时间间隔来获得差异。我将最近保存的时间(time2)与第一个保存时间(time1)进行比较。该方法基本上减去从第一个分配的第二个时间,在这种情况下,tim2减去time1。你会在一瞬间看到原因。

NSTimeInterval distanceBetweenDates = [time2 timeIntervalSinceDate:time1];

为了显示目的,我将时间转换为double(NSTimeInterval为double,检查https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html以获取更多信息),然后将它们转换为小时,分钟和秒值。

int timeInt = (int) distanceBetweenDates;

//I convert the values into the time value
int hours = timeInt / 3600;
int minutes = (timeInt / 60) % 60;
int seconds = timeInt % 60;

FInally我们在日志中显示结果,如果您还有标签显示。

NSLog(@"The total time is: %02u:%02u:%02u", hours, minutes, seconds);

NSString * time = [NSString stringWithFormat:@"%02u:%02u:%02u", hours, minutes, seconds];

self.totalLoginTimeLabel.text = time;

我希望这有助于任何人调查。

这里的整个代码:

-(void) calculateTimeIntervalFromStrings{

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
    [dateFormat setDateFormat:@"HH:mm:ss"];

    NSString * StringTime1 = self.coreDataReference.time1;
    NSString * StringTime2 = self.coreDataReference.time2;

    NSDate *time1 = [dateFormat dateFromString:StringTime1];
    NSDate *time2 = [dateFormat dateFromString:StringTime2];

    NSTimeInterval distanceBetweenDates = [time2 timeIntervalSinceDate:time1];

    int timeInt = (int) distanceBetweenDates;

    //I convert the values into the time value
    int hours = timeInt / 3600;
    int minutes = (timeInt / 60) % 60;
    int seconds = timeInt % 60;

    NSLog(@"The total time is: %02u:%02u:%02u", hours, minutes, seconds);

    NSString * time = [NSString stringWithFormat:@"%02u:%02u:%02u", hours, minutes, seconds];

    self.timeDifferenceLabel.text = time;


}

要调用此方法,请将其置于viewDidLoad方法中,如下所示:

[self calculateTimeIntervalFromStrings];