Search code examples
iosswiftnsdate

How to constuct NSDate object from String with milliseconds


I need to construct NSDate object from String, so I wrote the following code:

func getNSDateObjectFromString(string: String) -> NSDate { 
    var formatter = NSDateFormatter()
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    let date = formatter.dateFromString(string)
    return date!
}

Unfortunately, the input string sometimes may contain milliseconds too. What can I do in this case? I don't find any way to read milliseconds (not in the day) according to the http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns

Thanks in advance.


Solution

  • As far as I know, the format doesn't support "optional" fields. So you have to try the formats one by one:

    func getNSDateObjectFromString(string: String) -> NSDate {
        var formatter = NSDateFormatter()
        formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
    
        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
        var date = formatter.dateFromString(string)
    
        if date == nil {
            formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.S"
            date = formatter.dateFromString(string)
        }
    
        return date!
    }