如何在代码中将UIDatePicker更改为特定时间

18

我需要动态地将UIDatePicker更改为特定时间。

我的日期选择器仅设置为时间模式。 我可以使用

timePicker.setDate(NSDate(), animated: false)

但是我不知道如何将其更改为不同的时间,而不是当前时间。

那么我该如何更改呢?

谢谢

7个回答

20
你需要改变时间,可以使用 NSDateComponents 并将修改后的日期设置为你的 DatePicker
var calendar:NSCalendar = NSCalendar.currentCalendar()
let components = calendar.components(NSCalendarUnit.HourCalendarUnit | NSCalendarUnit.MinuteCalendarUnit, fromDate: NSDate())
components.hour = 5
components.minute = 50
datePicker.setDate(calendar.dateFromComponents(components)!, animated: true)

1
如果 UIDatePicker 处于仅时间模式,请不要这样做。原因是,想象一下上面的代码在2021年3月14日纽约执行。如果代码尝试更改小时=2,则会非常错误。由于夏令时的缘故,在2021年3月14日没有2点钟。正确的方法是硬编码一个没有夏令时的时区,如GMT,以便用户可以在没有上述问题的情况下读取/写入仅时间信息到DatePicker中。 - Cheok Yan Cheng

9

Swift 3和4:

extension UIDatePicker {

   func setDate(from string: String, format: String, animated: Bool = true) {

      let formater = DateFormatter()

      formater.dateFormat = format

      let date = formater.date(from: string) ?? Date()

      setDate(date, animated: animated)
   }
}

使用方法:

datePicker.setDate(from: "1/1/2000 10:10:00", format: "dd/MM/yyyy HH:mm:ss")

完美解决方案,感谢@Zombie在Swift 4中进行了检查。 - Naveed Ahmad

6

Swift 5

let calendar = Calendar.current
var components = DateComponents()
components.hour = 5
components.minute = 50
    
timePicker.setDate(calendar.date(from: components)!, animated: false)

5

要将日期选择器(仅时间)设置为特定时间,例如“09:00”,我将设置NSDateComponents和选择器如下。

let calendar = NSCalendar.currentCalendar()
let components = NSDateComponents()
components.hour = 9
components.minute = 0
timePicker.setDate(calendar.dateFromComponents(components)!, animated: true)

当使用 datePicker.datePickerMode = UIDatePickerMode.CountDownTimer 时,用于设置 UIDatePicker 的有用方法。 - ObjectiveTC

4
您可以通过以下方式格式化日期和时间来自定义它:
let dateString = "12-11-2015 10:50:00"
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy HH:mm:ss"
let date = dateFormatter.dateFromString(dateString)

timePicker.setDate(date, animated: false)

我需要设置一个 UIDatePicker 而不是一个文本框。 - ilan
格式化日期和时间不是设置 UIDatePicker 日期和时间的答案。 - CodeOverRide
更新:Divi,我明白你的意图,并且可以通过添加更多代码来使其更清晰。我尝试取消投票,但无法成功。 - CodeOverRide

3
你可以这样使用它。
timePicker.setDate(NSDate(timeInterval: 60, sinceDate: NSDate()), animated: false)

或者
timePicker.setDate(NSDate(timeIntervalSinceNow: 60), animated: false)

它会将日期与当前日期相差1分钟。


我需要转换成完全不同的时间。我从服务器获取一个“HH:mm”格式的时间,需要在日期选择器中显示它。 - ilan

0

如果您不想每次从字符串中获取日期或时间时都要键入多行代码,您可以复制以下函数并使用它

let DateVar = DateTimeFrmSrgFnc("31/12/1990",FmtSrg: "dd/MM/yyyy")

timePicker.setDate(DateVar, animated: false)

func DateTimeFrmSrgFnc(DateSrgPsgVar: String, FmtSrg FmtSrgPsgVar: String)-> NSDate
{
    // Format: "dd-MM-yyyy HH:mm:ss"

    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = FmtSrgPsgVar
    return dateFormatter.dateFromString(DateSrgPsgVar)!
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接