4

I have a problem with converting the string to date in swift 3. Here is my code, it returns me a nil value while converting.

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEE, dd MMM yyyy hh:mm:ss +zzzz"
dateFormatter.locale = Locale.init(identifier: "bg_BG")

let recdate = dateFormatter.date(from:"Fri, 10 Mar 2017 15:03:03 +0530")!;`
Sharath Kumar
  • 658
  • 3
  • 10
  • 26
nikhil
  • 616
  • 8
  • 22

2 Answers2

7

You set the wrong format specifier for hour and timezone. Use this:

dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss Z"
dateFormatter.locale = Locale(identifier: "en_US")
  • hh means 12-hour format so there's no hour 15. Use HH instead
  • +zzzz is invalid timezone specifier. Use Z instead
  • Unless Friday is shortened to Fri in Bulgarian, use an English locale
Code Different
  • 90,614
  • 16
  • 144
  • 163
  • 1
    tried this **E, d MMM yyyy HH:mm:ss Z** and **EEE, dd MMM yyyy HH:mm:ss Z** , Still not working . Im still getting **fatal error: unexpectedly found nil while unwrapping an Optional value 2017-03-13 08:52:50.557530 Dubber[1851:1317294] fatal error: unexpectedly found nil while unwrapping an Optional value** – nikhil Mar 13 '17 at 03:25
  • 2
    @nikhil Try `dateFormatter.locale = Locale.current`, I don't have idea why the "bg_BG" doesn't work. – chengsam Mar 13 '17 at 03:32
3

You have a couple of problems, first, as pointed out by Code Different, you need to be using HH to read 24-hour times. But, you're also specifying a locale, which means that the "word" portions must be in bulgarian, not english. Leaving the language the default seems to work fine:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss +zzzz"
//dateFormatter.locale = Locale.init(identifier: "bg_BG")
let recdate = dateFormatter.date(from:"Fri, 10 Mar 2017 15:03:03 +0530")!

If you were to use Bulgarian day and month names, your format should work.

dateFormatter.date(from:"нд, 10 март 2017 15:03:03 +0530")
David Berry
  • 40,941
  • 12
  • 84
  • 95