【问题标题】:How to change UIDatePicker to a specific time (in code)如何将 UIDatePicker 更改为特定时间(在代码中)
【发布时间】:2015-05-13 04:12:51
【问题描述】:

我需要将 UIDatePicker 动态更改为特定的。

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

设置时间
timePicker.setDate(NSDate(), animated: false)

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

那我怎么改呢?

谢谢

【问题讨论】:

    标签: ios swift uidatepicker


    【解决方案1】:

    您必须更改时间,您可以使用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)
    

    【讨论】:

    • 如果UIDatePicker 处于仅时间模式,请不要这样做。原因是,假设上面的代码是在 2021 年 3 月 14 日在纽约执行的。如果代码试图更改小时 = 2。那将是非常错误的。由于夏令时,2021 年 3 月 14 日没有凌晨 2 点。正确的方法是硬编码没有 DST(如 GMT)的时区,这样用户就可以在没有上述问题的情况下将仅时间信息读/写到 DatePicker。
    【解决方案2】:

    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 中检查
    【解决方案3】:

    要将日期选择(仅限时间)设置为特定时间,例如“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 很有用
    【解决方案4】:

    斯威夫特 5

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

    【讨论】:

      【解决方案5】:

      您可以通过这种方式格式化您的日期和时间来自定义它:

      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 而不是文本字段
      • format Date and Time 不是为 UIDatePicker 设置日期和时间的答案
      • 已更新:Divi 我看到了您尝试做的事情,并且可以通过向您的代码添加更多代码来更清楚地说明。我尝试撤消投票,但失败了。
      【解决方案6】:

      你可以这样使用它

      timePicker.setDate(NSDate(timeInterval: 60, sinceDate: NSDate()), animated: false)
      

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

      它会设置与当前日期相差 1 分钟的日期。

      【讨论】:

      • 我需要换一个完全不同的时间。我以“HH:mm”格式从服务器获取时间,我需要在日期选择器中显示它
      【解决方案7】:

      如果您不想每次都输入多行代码,而您需要字符串中的日期或时间 你可以复制下面的函数并用作

      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)!
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-21
        • 1970-01-01
        • 2017-09-23
        • 1970-01-01
        • 1970-01-01
        • 2021-02-06
        相关资源
        最近更新 更多