stu*_*ped 1 time calendar date swift swift3
我试图从本指南中获得两个日期的时差.我不知道该为dateComponents争论提供什么.当我直接传入时[.hour, .minute],我收到一个错误:
Playground execution failed: error: MyPlayground.playground:10:46: error: type of expression is ambiguous without more context
let timeDifference = calendar.dateComponents([.hour, .minute], from: stopTime!, to: date!)
^~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
```
我试图首先将它声明为常量但不确定类型是什么.参数是类型的Set<Calendar.Component>,但是当我试图说这是最高我得到一个错误Component,DateComponent或CalendarComponent.
````
let timeFormatter = DateFormatter()
timeFormatter.dateFormat = "hh:mm a "
let time = "12:03 pm"
let stopTime = timeFormatter.date(from: time)
let date = Date()
let calendar = Calendar.current
let components:[DateComponent] = [.hour, .minute]
let timeDifference = calendar.dateComponents(components, from: stopTime!, to: date!)
Run Code Online (Sandbox Code Playgroud)
该dateComponents(_:from:to:)方法声明如下:
public func dateComponents(_ components: Set<Calendar.Component>,
from start: Date, to end: Date) -> DateComponents
Run Code Online (Sandbox Code Playgroud)
第一个参数是类型,Set<Calendar.Components>但你似乎提供了一个[DateComponents].这就是你看错的原因.
因此,它应该这样做:
let components:[Calendar.Component] = [.hour, .minute]
let timeDifference = calendar.dateComponents(Set<Calendar.Component>(components),
from: stopTime!, to: date)
Run Code Online (Sandbox Code Playgroud)
首先,我将数组的类型更改为[Calendar.Component].其次,我Set<Calendar.Component>在传递components给方法之前创建了一个.另一件事是你写的date!.这!是多余的,因为date已经是非可选的.无需打开包装!
或者,您可以components完全删除变量!
let timeDifference = calendar.dateComponents([.hour, .minute],
from: stopTime!, to: date)
Run Code Online (Sandbox Code Playgroud)
现在编译好了!
但是,这可能不会产生您的预期结果,因为timeFormatter.date(from: time)在2000年生成了一个日期.我得到了这个非常脏的解决方案,但无论如何它仍然有效:
let timeFormatter = DateFormatter()
timeFormatter.dateFormat = "hh:mm a"
let time = "08:00 pm"
var stopTime = timeFormatter.date(from: time)
let date = Date()
let calendar = Calendar.current
let year = calendar.component(.year, from: date)
let month = calendar.component(.month, from: date)
let day = calendar.component(.day, from: date)
let hour = calendar.component(.hour, from: stopTime!)
let minute = calendar.component(.minute, from: stopTime!)
stopTime = calendar.date(bySetting: .year, value: year, of: stopTime!)
stopTime = calendar.date(bySetting: .month, value: month, of: stopTime!)
stopTime = calendar.date(bySetting: .day, value: day, of: stopTime!)
stopTime = calendar.date(bySetting: .hour, value: hour, of: stopTime!)
stopTime = calendar.date(bySetting: .minute, value: minute, of: stopTime!)
let timeDifference = calendar.dateComponents([.hour, .minute], from: stopTime!, to: date)
Run Code Online (Sandbox Code Playgroud)