【问题标题】:iOS NSTimeInterval from dates wrong日期错误的iOS NSTimeInterval
【发布时间】:2013-06-19 18:34:12
【问题描述】:

我正在计算 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 来选择两个日期。

【问题讨论】:

  • 更新您的日志语句以同时记录self.endTimeself.startTime。使用此更新后的日志语句的实际输出更新您的问题。
  • 这两次相隔 15 秒。为什么你会期待不同的结果?
  • @rmaddy 在记录开始和结束时间后,我意识到我的问题实际上不是持续时间,而是由 datePicker 设置的日期。知道如何让它返回一个 0 秒的日期吗?我不确定为什么 datePicker 一次给出一个 45 秒的日期,另一次给出一个 0 秒的日期。

标签: ios nsdate nstimeinterval


【解决方案1】:

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

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

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

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

    return [NSDate dateWithTimeIntervalSinceReferenceDate:truncated];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 2016-07-05
    相关资源
    最近更新 更多