【问题标题】:Date Format in Swift for Round-trip date/time patternSwift 中用于往返日期/时间模式的日期格式
【发布时间】:2020-10-04 18:02:23
【问题描述】:

我正在使用 swift5 开发一个 iOS 项目,并遇到如下日期格式错误。

“日期字符串与格式化程序期望的格式不匹配。”

我正在为 swift5(https://github.com/OpenAPITools/openapi-generator/tree/master/samples/client/petstore/swift5/default) 使用 openapi-generator,它生成了以下格式化程序。

static let withoutSeconds: DateFormatter = {
    let formatter = DateFormatter()
    formatter.calendar = Calendar(identifier: .iso8601)
    formatter.locale = Locale(identifier: "en_US_POSIX")
    formatter.timeZone = TimeZone(secondsFromGMT: 0)
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
    return formatter
}()

private func setup() {
    calendar = Calendar(identifier: .iso8601)
    locale = Locale(identifier: "en_US_POSIX")
    timeZone = TimeZone(secondsFromGMT: 0)
    dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"
}

override init() {
    super.init()
    setup()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    setup()
}

override public func date(from string: String) -> Date? {
    if let result = super.date(from: string) {
        return result
    }
    return OpenISO8601DateFormatter.withoutSeconds.date(from: string)
}

效果很好,但日期时间格式存在上述问题

我们的 api 返回以下 json 字符串作为日期时间,我无法让它在上面的代码中解析这个字符串。

"createdDate": "2020-03-01T05:42:15.0503394",
"updatedDate": "2020-09-02T07:06:56.6389018",

根据本文档,从我们的 api 返回的日期时间字符串似乎具有 Roundtrip fromat 说明符(https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings#Roundtrip)

尝试了很多东西,但到目前为止都没有运气。

提前感谢您的帮助。

【问题讨论】:

    标签: swift5 format-specifiers openapi-generator dateformatter


    【解决方案1】:

    请仔细查看日期字符串。没有时区(代表Z 说明符)?

    这种日期格式应该可以工作

    yyyy-MM-dd'T'HH:mm:ss.S
    

    【讨论】:

    • 哦,谢谢它有效。但我想知道这是否是正确的转换,因为原始日期字符串在秒后有额外的 7 个数字,而您的解决方案省略了这些数字。
    • 不,不是,秒后的数字被称为“小数秒”,用大写的S表示。请参阅unicode.org/reports/tr35/tr35-31/… 了解所有格式说明符。
    猜你喜欢
    • 2016-01-18
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    相关资源
    最近更新 更多