【问题标题】:Swift: Date string only has month and year, can I still produce a date?Swift:日期字符串只有月份和年份,我还能生成日期吗?
【发布时间】:2017-01-25 12:05:22
【问题描述】:

我正在将一些旧的 Javascript 代码移植到 Swift 应用程序中,我来自客户端的数据集有点奇怪,因为它们只记录了每个日期的月份和年份,所以安装日期字符串看起来像:@ 987654321@.

在 Javascript 中,我可以使用:var date = new Date("2001-05"); 它返回:2001-05-01T00:00:00.000Z 将时间/日期归零,但按预期保持年份和月份。

我目前在 Swift 中使用以下代码:

var date = "2001-05"

func stringToDate(_ date: String) -> Date? {
    let df = DateFormatter()
    df.locale = NSLocale(localeIdentifier: "en_US_POSIX") as Locale!
    df.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZ"

    return df.date(from: date)
}

print(stringToDate(date))

这总是产生 nil 输出。是否可以在 Swift 中重现日期格式化的 JS 行为?

【问题讨论】:

  • 在否决票背后的推理总是受到赞赏......在没有正当理由的情况下投反对票有点粗鲁

标签: swift date


【解决方案1】:

你几乎拥有它,我在操场上测试它使用它(只是改变了“yyyy-MM”部分):

var date = "2001-05"

func stringToDate(_ date: String) -> Date? {
    let df = DateFormatter()
    df.locale = NSLocale(localeIdentifier: "en_US_POSIX") as Locale!
    df.dateFormat = "yyyy-MM"
    df.date(from: date)

    return df.date(from: date)
}

print(stringToDate(date)!)

【讨论】:

  • 噢!现在我感觉很笨。我认为该格式是所需的输出格式,而不是匹配的输入格式。谢谢:)
  • 没问题 :D 它有时会发生在我们所有人身上!请将其标记为已回答!
  • 更简单:df.locale = Locale(identifier: "en_US_POSIX")。 – 而df.date(from: date) 只需要一次。
猜你喜欢
  • 2020-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多