首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DateFormatter: dateFormat毫秒Swift

DateFormatter: dateFormat毫秒Swift
EN

Stack Overflow用户
提问于 2018-10-08 06:58:10
回答 1查看 1.7K关注 0票数 1

我正在编写DateFormatterdateFormat,以便将JSON从服务器转换为本地的快速对象。服务器将返回以下内容。

  • 2018-10-07T15:26:33.236Z
  • 2018-10-07T15:26:33Z
  • 2018-10-07T15:26:33.26Z

下面是我的代码,但我不确定是否可以只写一行,而不是开关-大小写条件(从开关开始到结束)。

无论返回时间是否有毫秒,只有一个dateFormat是理想的。任何建议都很感激。

代码语言:javascript
运行
复制
    let decoder = JSONDecoder()
    decoder.dateDecodingStrategy = .custom{
        let container = try $0.singleValueContainer()
        let dateStr = try container.decode(String.self)
        let formatter = DateFormatter()
        formatter.calendar = Calendar(identifier: .gregorian)
        formatter.locale = .current
        // *** SWITCH-CASE: START ***
        switch dateStr.utf8.count {
        case 20:
                    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
        case 22:
                    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SZ"
        case 23:
                    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSZ"
        case 24:
                    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
        default:
                    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
        }
        // *** SWITCH-CASE: END ***
        formatter.timeZone = TimeZone(secondsFromGMT: 0)
        return formatter.date(from: dateStr)!
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-08 07:34:33

实际上,检查日期字符串是否包含句点就足够了

代码语言:javascript
运行
复制
if dateStr.contains(".") {
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SZ"
} else {
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
}

或者使用ISO8601DateFormatter并使用正则表达式删除毫秒,这也避免了指定calendarlocaletimezone

代码语言:javascript
运行
复制
let formatter = ISO8601DateFormatter()
let trimmedDateStr = dateStr.replacingOccurrences(of: "\\.\\d+", with: "", options: .regularExpression)
return formatter.date(from: trimmedDateStr)!
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52696936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档