【问题标题】:How to constuct NSDate object from String with milliseconds如何用毫秒从字符串构造日期对象
【发布时间】:2014-12-01 09:06:13
【问题描述】:

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

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

不幸的是,输入字符串有时也可能包含毫秒。在这种情况下我能做什么?根据http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns

,我没有找到任何方法来读取毫秒(不是当天)

提前致谢。

【问题讨论】:

  • 检查this
  • @Gandalf 感谢您的回答,但在这种情况下,不包含毫秒的字符串会抛出
  • Okkk,如果情况是“输入字符串有时可能包含毫秒”,那么您可以使用分隔符“。”截断字符串。现在您可以根据结果数组使用匹配的格式化程序,该数组可能包含也可能不包含第二个对象。

标签: ios swift nsdate


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你可以试试这样的:

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

    【讨论】:

    • 感谢您的回答,但在这种情况下,不包含毫秒的字符串会抛出
    【解决方案3】:

    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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2018-12-22
        • 1970-01-01
        • 2012-07-29
        • 1970-01-01
        • 2015-07-24
        • 1970-01-01
        • 1970-01-01
        • 2012-09-10
        • 1970-01-01
        相关资源
        最近更新 更多