1

The app crashes once the user selects any date of September. It only happens with iOS 15.4.

I have datePicker formatted date to return always in UTC format en_GB.

    @objc func doneDateClicked() {

    let dateFormatter = DateFormatter()
    dateFormatter.dateStyle = .medium
    dateFormatter.timeStyle = .none //CHANGED 09.07.2020 date medium time none
    dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
    dateFormatter.timeZone = TimeZone(identifier: "GMT")
    dateFormatter.locale = Locale(identifier: "en_GB")
    dateFormatter.dateFormat = "dd MMM yyyy"
    let timeFormatter = DateFormatter()
    timeFormatter.dateStyle = .none
    timeFormatter.timeStyle = .medium
    timeFormatter.timeZone = TimeZone(secondsFromGMT: 0)
    timeFormatter.timeZone = TimeZone(identifier: "GMT")
    timeFormatter.locale = Locale(identifier: "en_150")


    dateTextField.text = dateFormatter.string(from: (datePicker?.date )!)
    self.view.endEditing(true)
}

Then I need to covert the selected date from string (dateTextField.text) to date on iOS 15.4 the month September it shows "Sept".

code to convert from string to date

    let formatter = DateFormatter()             
    formatter.locale = Locale(identifier: "en_GB")
    formatter.dateFormat = "dd MMM yyyy hh:mm:ss"
    formatter.calendar = Calendar(identifier: .gregorian)
    let datenN = formatter.date(from: "\(dateTextField.text ?? "") 00:00:00")

datenN crashing the app it returns nil

I tried to use code formatter.locale = Locale(identifier: "en_US_POSIX") but the app still crashing

  • You should set `dateFormatter.locale` (not just `formatter.locale`) to en_US_POSIX too. That said, why are you setting this as the text of a text field? – Sweeper Sep 16 '22 at 00:44

1 Answers1

1

Assuming this problem occurs just for September and on iOS 15.4, then a quick work around, is to replace "Sept" with "Sep", using

 dateTextField.text = dateFormatter.string(from: (datePicker?.date )!)

 if dateTextField.text.contains("Sept") {
     dateTextField.text = dateTextField.text.replacingOccurrences(of: "Sept", with: "Sep")
 }