如何在plist中保存持续时间?

时间:2014-08-13 00:38:48

标签: ios nsdate plist

如何在plist中保存持续时间,以便我可以在Core Data中加载一些示例数据?

持续时间我的意思是任务有一个持续时间。可能是1小时12分钟。可能是15米。

使用此类别

+(NSDate *)dateWithHour:(NSInteger)hour minute:(NSInteger)minute
{
    NSDateComponents *components = [[NSDateComponents alloc]init];
    components.hour = hour;
    components.minute = minute;
    NSCalendar *calender = [NSCalendar currentCalendar];
    NSDate *date = [calender dateFromComponents:components];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    [dateFormatter setDateFormat:@"HH:mm"];
    NSLog(@"**Date Utils** %@",[dateFormatter stringFromDate:date]);

    return date;
}

我可以创建15分钟的持续时间

 task.duration = [NSDate dateWithHour:0 minute:15];

它以:

输出到控制台
0001-01-01 04:29:24 +0000

这似乎不是15分钟。它看起来像4h29m24s。如果我通过dateFormatter运行日期肯定会打印出15米。 如何在plist中输入持续时间,如下所示?

plist

我错过了什么?

1 个答案:

答案 0 :(得分:2)

由于时区和闰年和闰秒等原因,日期非常复杂。它们不适合这种用例,你会遇到各种各样的错误。

持续时间的正确数据类型是NSTimeInterval,它是一个64位浮点数,以秒为单位。 NSDate也在内部使用此数据类型。

创建时间间隔的最简单方法是:

NSDate *aDate = ...
NSDate *anotherDate = ...
NSTimeInterval duration = [aDate timeIntervalSinceDate:anotherDate];

你要把它保存到NSNumber的一个plist:

NSNumber *durationNumber = [NSNumber numberWithDouble:duration];

请注意,NSTimeInterval实际上是双倍的。