来自日期错误的iOS NSTimeInterval

时间:2013-06-19 18:34:13

标签: ios nsdate nstimeinterval

我正在计算startTime和endTime之间的持续时间,并使用以下代码来获取两个NSDates之间的时间间隔

    NSTimeInterval duration = [self.endTime timeIntervalSinceDate:self.startTime];
    NSLog(@"interval: %f", duration);

然而,NSLog语句告诉我持续时间错误。日期来自datePicker。例如,当我将开始日期设置为2013年6月19日晚9:15,结束日期为2013年6月19日,2013年9月16日(一分钟后)时,记录的持续时间为15.00000而不是60.00000。

这是为什么?如何在两个日期之间获得正确的持续时间?

修改

我做了一些记录并记录了开始日期和结束时间。这是NSLog语句

NSLog(@"interval: %f for %@ to %@", duration, self.startTime, self.endTime);

以及记录的内容:

interval: 15.000000 for 2013-06-19 04:52:45 +0000 to 2013-06-19 04:53:00 +0000

由于某种原因,datePicker的开始日期是将秒数设置为45,即使日期选择器只是说4:52。我怎样才能解决这个问题?

另外,作为注释,如果完全重要,则使用相同的datePicker来选择两个日期。

1 个答案:

答案 0 :(得分:1)

在选择时间时,问题实际上似乎是UIDatePicker的“功能”。尽管它只显示小时和分钟,但时间包括当前的秒数。我个人认为这是日期选择器中的一个错误。

您最好的解决方案是调整从日期选择器返回的值。

这是确保日期为0秒的一种方法:

- (NSDate *)truncateSeconds:(NSDate *)pickerDate {
    NSTimeInterval secs = [pickerDate timeIntervalSinceReferenceDate];
    long truncated = secs / 60 * 60;

    return [NSDate dateWithTimeIntervalSinceReferenceDate:truncated];
}