【问题标题】:How to convert string to date correctly? [duplicate]如何正确将字符串转换为日期? [复制]
【发布时间】:2020-05-10 19:05:57
【问题描述】:

为什么 dateFormatter 从无效的格式字符串返回正确的日期?

let dateFormatter = DateFormatter()

dateFormatter.dateFormat = "yyyy-MM-dd"

let date = dateFormatter.date(from: "2020/////07////////10") //"Jul 10, 2020 at 12:00 AM"

【问题讨论】:

标签: ios swift datetime date-parsing dateformatter


【解决方案1】:

我会说更多——它也能出人意料地工作

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"

let dotDate = dateFormatter.date(from: "2020....07...10") // Optional(2020-07-09 21:00:00 +0000)
let commaDate = dateFormatter.date(from: "2020,,,,07,,,,10") // Optional(2020-07-09 21:00:00 +0000)

我的版本可能是Apple方面内部实现的问题并与ASCII码表进行比较,其中这些字符的代码(,-./)是按顺序排列的(从 44 到 47)

【讨论】:

    【解决方案2】:

    我确实运行了你的代码,它给出了nil

    如果我输入正确的日期格式,那么我会收到输出

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    let date = dateFormatter.date(from: "2020-7-10")
    print(date) // Optional(2020-07-10 00:00:00 +0000)
    

    【讨论】:

    • hm,我运行了作者的代码,得到了作者写的结果-Optional(2020-07-09 21:00:00 +0000),没有nil
    • 是的,我也得到了作者所说的结果
    • @VadimNikolaev 我在online.swiftplayground.run 上运行它。在 XCode 中检查它
    【解决方案3】:

    这可能是他们算法的一部分。

    如果您希望格式化程序在这种情况下返回 nil,您可以将 dateFormat 更改为:

    dateFormatter.dateFormat = "yyyy/MM/dd"
    

    结果

    let date = dateFormatter.date(from: "2020/////07////////10") // nil 
    let date2 = dateFormatter.date(from: "2020/07/10") // Jul 10, 2020 at 12:00 AM"
    let date3 = dateFormatter.date(from: "2020.07.10") // Jul 10, 2020 at 12:00 AM"
    

    【讨论】:

      猜你喜欢
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      相关资源
      最近更新 更多