0

我正在计算 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 年 916 点(一分钟后)时,记录的持续时间是 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 来选择两个日期。

4

1 回答 1

1

这个问题实际上似乎是UIDatePicker选择时间时的“特征”。即使它只显示小时和分钟,时间也包括当前的秒数。我个人认为这是日期选择器中的错误。

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

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

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

    return [NSDate dateWithTimeIntervalSinceReferenceDate:truncated];
}
于 2013-06-19T18:56:39.930 回答