【问题标题】:Parsing date string coming from Fitbit API解析来自 Fitbit API 的日期字符串
【发布时间】:2017-06-06 19:07:33
【问题描述】:

对于我的一生,我无法弄清楚如何将从 Fitbit API 返回的日期字符串转换为 iOS 上的 NSDate/Date 对象。

日期字符串格式如下:

2017-01-21T10:39:43.000

我使用的 API 记录在此处:https://dev.fitbit.com/docs/devices/,每个设备都返回 JSON 中的“lastSyncTime”属性。

我尝试了几种不同的日期格式,它们不断返回日期的 nil 值。

          let formatter = DateFormatter()
//        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
//        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'"
//        formatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"
//        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssz"
//        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSz"
        formatter.dateFormat = "yyyy-MM-dd"
        let date = formatter.date(from: lastSyncTime)

我尝试了所有这些不同的日期格式,但无济于事。

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 我有时也会在日期格式化程序上遇到困难。一个建议:使用您的候选格式化程序并使用它将日期 转换为 字符串并记录结果。将其与您想要的格式进行比较。它可以帮助您将差异归零。

标签: ios swift cocoa nsdate nsdateformatter


【解决方案1】:

这对我有用:

import Foundation

let date = "2017-01-21T10:39:43.000"
let formatter = DateFormatter()

formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
let formatDate = formatter.date(from: date)

print(formatDate!)

输出: 2017-01-21 16:39:43 +0000

【讨论】:

    【解决方案2】:

    使用这个格式化程序来解析它。

    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
    formatter.date(from: dateString)
    

    希望对你有帮助

    【讨论】:

    • 轰隆隆!就是那个!谢谢你:)
    • 请记住,这会解释用户本地时区中的日期字符串,这对于 API 可能正确也可能不正确。
    • 我不认为上面给出的“2017-01-21T10:39:43.000”时间包含时区值。
    • 是的,看起来这是用户本地时区的时间。因此,使用 UTC 时区将其解释回来会使其看起来像是在当地时区。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2019-02-15
    • 2014-02-18
    • 1970-01-01
    相关资源
    最近更新 更多