我正在使用时间间隔为30分钟的日期选择器。在datePicker中,它以30的间隔正确显示。当我从选择器中选择值时,我正在获取当前时间。我期望它应该是从选择器中选择的值,而不是当前时间。我正在使用以下用Swift 4编写的代码。
func getTime(sender:UIDatePicker)
{
let dateFormatter = DateFormatter()
dateFormatter.timeStyle = DateFormatter.Style.short
let endDate = (sender.date).addingTimeInterval(TimeInterval(30.0 * 60.0))
let time = dateFormatter.string(from: endDate)
print(“time”) //getting current time like 8:14 AM , expected should be 8:00 AM
}
答案 0 :(得分:3)
您可以根据自己的选择从DatePicker
中获取时间。但是您必须自己将初始时间四舍五入到下一个间隔小时。您可以在下面看到的代码对您有帮助。
在这种方法中,我们将目标添加到
datepicker
中,以根据我们的选择获得时间,并且我们还获得了初始时间。
override func viewDidLoad() {
super.viewDidLoad()
let currentTime = Date()
let interval = 30
self.getInitialTime(currentTime: currentTime, interval: interval)
datePicker.addTarget(self, action: #selector(getTime(sender:)), for: .valueChanged)
}
此功能将计算四舍五入到下一个间隔时间的时间。
func getInitialTime(currentTime: Date, interval: Int) {
var components = Calendar.current.dateComponents([.minute, .hour], from: currentTime)
let minute = components.minute
let remainder = ceil(Float(minute!/interval))
let finalMinutes = Int(remainder * Float(interval)) + interval
components.setValue(finalMinutes, for: .minute)
guard let finalTime = Calendar.current.date(from: components) else { return }
self.getDate(date: finalTime)
}
在这些方法中,我们正在调用另一个将日期转换为所需格式的函数。
@objc func getTime(sender: UIDatePicker) {
self.getDate(date: sender.date)
}
func getDate(date: Date) {
let dateFormatter = DateFormatter()
dateFormatter.timeStyle = DateFormatter.Style.short
dateFormatter.timeZone = TimeZone.current
let time = dateFormatter.string(from: date)
print(time)
}
谢谢。
答案 1 :(得分:-1)
我认为这会有所帮助。
func getTime(sender:UIDatePicker)
{
var dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh:mm:ss a"
var ouptputTime = dateFormatter.string(from: sender.date)
print("ouptputTime:-\(ouptputTime)")
}