首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dateComponents(_,从,到)返回错误的数据,直到Picker触摸

dateComponents(_,从,到)返回错误的数据,直到Picker触摸
EN

Stack Overflow用户
提问于 2021-05-29 19:50:55
回答 1查看 106关注 0票数 1

我有两个DatePickers,用户可以选择小时和分钟。

一旦选择器被更改,就会调用"calcDuration"-function来计算时间差,并在几小时和分钟内在标签上显示它。

基本故事板设置

代码语言:javascript
复制
    func calcDuration()  {

    
    let diffComponents = Calendar.current.dateComponents([.minute, .hour], from: datePicker1.date, to: datePicker2.date)
    
    let hours = diffComponents.hour!
    let minutes = diffComponents.minute!


    durationLabel.text = "Δ \(hours)h : \(minutes)m"
}

如果我运行该应用程序,并在较低的datePicker (datePicker2)中将分钟数增加一分钟,那么“让分钟= diffComponents.minute!”仍然是零。

调试器-在DatePicker2更改1分钟后显示0分钟的结果

如果我再加一点,它总是比实际的差少一分钟。

示例:

选择器1: 20:30选择器2: 20:31 ->计算差:0分钟

拾取器1: 20:30 ->计算差:1分钟

选择器1: 20:30选择器2: 20:41 ->计算差10分钟

如果我减少了较低的DatePicker (datePicker2)的分钟数,那么一切都会正常工作,并且以分钟为单位的差异将被正确显示。当datePicker2小时增加1 ->时,同样的效果是59分钟,如果减少1小时,它是正确的(-1小时)。

示例:

采摘器1: 20:30 ->计算差2: 20:29 -1分钟

选择1: 20:30选择器2: 20:20 :20 ->计算差:-10分钟

解决这个问题的唯一方法是移动上面的DatePicker (datePicker1)。不管我是否移动了datePicker1的时间或分钟,之后一切都很好。因此,如果我启动应用程序,将datePicker1的时间增加1小时,然后将它减少1小时,最后更改datePicker2,一切都很好,计算正确。

我正在使用iOS 14.5 / Xcode 12.5。

谢谢你的帮助!!

编辑:

  1. 如果我看一下向datePicker2添加一分钟后的秒数,就会得到59s的差异:

  1. 如果我查看Date()对象,它们看起来很好:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-31 00:23:42

问题是,内部初始选择日期之间有很小的不同。这导致了一个“问题”,对您来说,这是一个舍入错误。

解决方案是将选择日期设置为完全相同的日期。这里有个办法。在viewDidLoad中,可以这样说:

代码语言:javascript
复制
let now = Date(timeIntervalSince1970: Double(Int(Date().timeIntervalSince1970)))
picker1.date = now
picker2.date = now

这样就消除了舍入错误,现在选择器的行为与您所期望的一样。

或者,如果您要在代码中自己设置选择时间,请执行相同的操作。首先,消除舍入错误,这样您就可以将相同的值分配给这两个选择器。

问题是,无论如何,选择日期之间的差异应该仅限于整数值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67755263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档