【问题标题】:Getting current time from datepicker if interval has set for datepicker in Swift如果在 Swift 中为 datepicker 设置了间隔,则从 datepicker 获取当前时间
【发布时间】:2018-06-21 03:20:10
【问题描述】:

我正在使用时间间隔为 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
}

【问题讨论】:

  • 调用getTime 函数时,日期选择器中显示的时间是什么时候?这个getTime 函数是什么时候调用的?
  • 我有点困惑你想做什么。您有一个日期选择器,您希望在选择时(例如:上午 8:00)显示上午 8:30 而不是上午 8:00? :
  • @TungVuDuc 在 datePicker 中,它以 30 的间隔正确显示,如 8、8:30、9 等。假设当前时间是 8 点 14 分,介于 8 点到 8 点 30 分之间。我从选择器中选择了 8 个。所以它应该返回 8:00。但它会在 8 点 14 分返回。它给出的是当前时间,预计是 8:00。

标签: ios swift uidatepicker


【解决方案1】:

您可以根据您的选择从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)
}

谢谢。

【讨论】:

    【解决方案2】:

    我认为这会有所帮助。

    func getTime(sender:UIDatePicker)
    {
        var dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "hh:mm:ss a"
        var ouptputTime = dateFormatter.string(from: sender.date)
        print("ouptputTime:-\(ouptputTime)")
    }
    

    【讨论】:

    • 您认为这有何帮助?这如何解决问题?这只是改变了日期的格式。但是日期的格式没有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多