【问题标题】:Get the format of date | Swift | iOS获取日期格式 |斯威夫特 | iOS
【发布时间】:2018-01-16 23:08:01
【问题描述】:

根据要求,我的 API 可能会以“2018-01-01”或“01-01-2018”或“2018-01-01T00:00:00”格式返回日期

如何检查日期的格式?

例如:我的 API 响应代码“2018-01-01”应返回“yyyy-MM-dd”等。

我可以通过检查我的字符长度并相应地分配日期格式来做到这一点..但我觉得这不是正确的方法。

【问题讨论】:

  • 您的日期的时区是什么?他们是 UTC 吗?
  • 第二次约会"01-01-2018"的格式是什么? "MM-dd-yyyy""dd-MM-yyyy"?
  • 如果您绝对肯定日期将采用 3 种已知格式之一,那么 Leo 的答案中的方法将起作用,但这是一个非常糟糕的情况。为什么您使用的 API 会提供 3 种不同格式的日期,而没有任何标签来区分哪个是哪个?

标签: ios swift date nsdateformatter


【解决方案1】:

您只需要定义您的日期格式并尝试每种格式。其中之一会成功。只需确保所有日期字符串都来自同一个时区(我想它们都是 UTC),并且在使用固定格式日期时不要忘记将日期格式化程序区域设置为“en_US_POSIX”:

let dateStrings = ["2018-01-01", "01-01-2018", "2018-01-01T00:00:00"]
let dateFormats = ["yyyy-MM-dd'T'HH:mm:ss", "yyyy-MM-dd", "MM-dd-yyyy"]
let formatter = DateFormatter()
formatter.calendar = Calendar(identifier: .iso8601)
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(secondsFromGMT: 0)
var dates: [Date] = []
for dateString in dateStrings {
    for dateFormat in dateFormats {
        formatter.dateFormat = dateFormat
        if let date = formatter.date(from: dateString) {
            dates.append(date)
            print("dateFormat:", dateFormat)
            print("date:", date)
            break
        }
    }
}

这将打印出来

日期格式:yyyy-MM-dd

日期:2018-01-01 00:00:00 +0000

日期格式:MM-dd-yyyy

日期:2018-01-01 00:00:00 +0000

日期格式:yyyy-MM-dd'T'HH:mm:ss

日期:2018-01-01 00:00:00 +0000

【讨论】:

  • 鉴于要求,您的回答让 OP 将输入字符串转换为日期,但这不是他所要求的。他问如何返回能够解析日期的日期字符串。为此,您需要稍微重构此代码:“print("format for '(dateString)' is '(dateFormat)'。”也许将其构造为返回有效日期格式的函数。
  • 那真的很容易。他所需要的只是在附加日期后获取 dateFormat。
  • 是的。将您的回答稍微重构为一个函数,该函数将字符串日期作为输入并返回用作输出的格式字符串,这将是微不足道的。但是,正如您在 cmets 中提到的那样,我们无法分辨样本日期的哪一部分是月份,哪一部分是日期。
  • @DuncanC 我认为 OP 不需要知道日期格式。他要求只是为了能够解析它已经在我的答案中显示的日期字符串。如果他真的需要,他可以通过查看我的代码自行解决。
  • 他确实说过“我的 API 响应代码“2018-01-01”应该返回“yyyy-MM-dd”等。”这非常明确。这个问题不是很清楚,正如您所说,OP 应该能够重构您的代码以在不费力的情况下给出该结果。
【解决方案2】:

在 API 中使用不明确的日期格式是有风险的。但是,如果您对此感到困惑,您可以制作多个 DateFormatters 并将每个配置为特定格式(通过相应地设置它们的 dateFormat )并尝试依次使用其中的每一个来转换字符串。一旦你成功了,你就知道你得到了哪种格式(它是dateFormat)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2017-07-22
    • 2017-03-24
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多