是否可以格式化UIDatePicker?

时间:2019-02-04 19:48:07

标签: ios swift uidatepicker

我想知道是否可以格式化UIDatePicker吗?

我希望日期前的工作日为字符串,例如“ Monday 01.01.2018”。我已经看过很多次了,但是什么也没发现。

当前仅显示日期,而不显示星期几。

我到处搜索,但没有找到答案。

1 个答案:

答案 0 :(得分:2)

如果您只显示日期并且也想查看星期几,则可能必须实施自己的UIPickerView

例如,这将创建一个单组件选择器。而且,由于视您的住所而定,2019年1月2日可能被解释为1月2日或2月1日,因此我建议使用一种EEEMMMdyyyy这样的本地化格式,该格式应简洁,本地化且明确:

class ViewController: UIViewController {

    @IBOutlet weak var pickerView: UIPickerView!

    private var startDate: Date!
    private var endDate: Date!

    private let formatter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.setLocalizedDateFormatFromTemplate("EEEMMMdyyyy")
        return formatter
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        configurePicker()
    }

    func configurePicker() {
        // you can also hook up delegate and datasource in IB if you prefer

        pickerView.dataSource = self
        pickerView.delegate = self

        // set the range of dates to whatever is appropriate for your app

        let now = Date()
        startDate = now
        endDate = Calendar.current.date(byAdding: .year, value: 1, to: now)
    }

}

extension ViewController: UIPickerViewDataSource {
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return Calendar.current.dateComponents([.day], from: startDate, to: endDate).day!
    }
}

extension ViewController: UIPickerViewDelegate {
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        let date = Calendar.current.date(byAdding: .day, value: row, to: startDate)!
        return formatter.string(from: date)
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        let date = Calendar.current.date(byAdding: .day, value: row, to: startDate)!
        print(formatter.string(from: date))
    }
}

产生(对于美国用户):

enter image description here

现在,如果您想同时拥有自定义的日期字符串格式和多个组成部分(例如,将日,月和年作为单独的列),则会变得更加混乱(因为您必须执行诸如调整日期值范围的操作)当您更改月份时),但是想法是一样的。只需创建自己的UIPickerView(或在Interwebs中搜索第三方解决方案)即可。