如何从String构造Date对象,以毫秒为单位

时间:2014-12-01 09:06:14

标签: ios swift nsdate

我需要从NSDate构造String对象,所以我编写了以下代码:

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

不幸的是,输入字符串有时也可能包含毫秒。在这种情况下我该怎么办?根据{{​​3}}

,我找不到任何方法来读取毫秒(不是在白天)

提前致谢。

4 个答案:

答案 0 :(得分:3)

据我所知,格式不支持“可选”字段。所以你必须逐个尝试这些格式:

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!
}

答案 1 :(得分:1)

您可以尝试以下内容:

formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"

答案 2 :(得分:1)

Swift 3解决方案

在对日期格式进行了一些试验和错误后,这对我使用Swift 3起了作用。

let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS"
let date = formatter.date(from: "2017-03-11 13:16:31.177")!
debugPrint(dateFormatter.string(from: date))

并且在往返之后导致预期的调试输出

"2017-03-11 13:16:31.177"

请注意,使用"yyyy-MM-dd'T'HH:mm:ss.SSS"格式会导致formatter.date(from:返回nil个可选Date

答案 3 :(得分:0)

它们重要吗? 在DateFormatter中,您可以按年,月,日,小时,分钟,秒创建匹配的字符串,但您不需要。如果匹配的字符串不包含任何字符串,格式化程序将忽略它们。