I am working with dates in Swift. I have to convert from String to Date but some weird stuff is happening. When I run my code on a simulator and pass my date string to formatter, it returns nil. But when I run my code on a physical device it works perfectly.
class ChatViewController: MessagesViewController {
var uid: String
var isNewConversations:Bool
private var messages = [Message]()
private var selfSender: Sender?
var senderUid: String
var conversation_Id: String?
public static let dateFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .long
formatter.locale = .current
return formatter
}()
}
and I am using it like this :
let date = ChatViewController.dateFromatter.date(from: dateString)
My date input in string is: “08-Jan-2023 at 8:57:10 PM GMT+5”
I just debug the whole code but I am not getting what is happening. When I debug it on physical device it works perfectly but when I run it on a simulator it is not working fine, i.e the debugger shows that in ‘date’ variables you have got nil.
2
Answers
Never use
dateStyle
and/ortimeStyle
when parsing a date string. Always usedateFormat
. Styles can vary based on the user’s locale and other settings on their device. It can also vary based on the user’s language.Since you need to parse a fixed format date string you need to provide a specific date format. You must also use a special locale on the date formatter since your fixed format date string is always in English.
How about this date formatter: