Optional Date is not working?

Optional Date is not right working on my code. This is my code.

extension String {
    func toDate(format: String = "yyyyMMddHHmmssSSS") -> Date? {
        let dateFormatter = DateFormatter()
        dateFormatter.locale = Locale(identifier: "en_US_POSIX")
        dateFormatter.timeZone = TimeZone(identifier: "Asia/Tokyo")
        dateFormatter.dateFormat = format
        return dateFormatter.date(from: self)
    }
}

apiOutput has these datas.

▿ apiOutput
  ...
  ▿ stockStartDate : Optional<String>
    - some : "20200722"
  ▿ stockEndDate : Optional<String>
    - some : "20200722"
  ...

I executed this code.

let stockStartDate = apiOutput.tmStockStartDate?.toDate(format: "yyyyMMdd")

Then, I want have a result is stockStartDate has optional-date value, but this result is nil.

スクリーンショット 2020-07-22 15.34.44

addition, i tried the variant print on LLDB-console, then the variant has a result i want.

(lldb) po stockStartDate
▿ Optional<Date>
  ▿ some : 2020-07-21 15:00:00 +0000
    - timeIntervalSinceReferenceDate : 617036400.0

I can't understand what's happend.

P.S.
I'm sorry. My English is so bad. Please let me know if I say something that's unclear.

If the debugger shows the expected value, why do you think it's nil? I see the screenshot of the mouse-over debug view, but perhaps the bug is there, and not in optionals. Maybe you moused over before the value was set.

1 Like

Thank you for reply.

I think mouse-over debug view has bug, too. but variant-viewer is also result nil.

スクリーンショット 2020-07-22 16.19.56

Never trust the Swift debugger!
If you ever see debugger showing a value you don't expect, try adding print and recompiling your code to make sure debugger isn't lying to you.

2 Likes

In addition to what others have said, you need to be very careful when using DateFormatter to parse fixed-format date strings that don’t include a time. I posted an in-depth explanation of this to DevForums.

Share and Enjoy

Quinn “The Eskimo!” @ DTS @ Apple

2 Likes