【问题标题】:swift 5 - String to Date conversion results in nil [duplicate]swift 5 - 字符串到日期的转换结果为零 [重复]
【发布时间】:2020-05-24 18:44:54
【问题描述】:

Swift 5.x 有什么变化吗?不知道我在这里做错了什么。

    extension String {
      var dateValue: Date? {
        let dateAsString = "13:15"
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "HH:mm"
        let date = dateFormatter.date(from: dateAsString) //date is being nil here
        let Date24 = dateFormatter.string(from: date!)
        print("24 hour formatted Date:",Date24)
        return date
       }
    }

【问题讨论】:

  • 您的手机设置为 12h 格式吗?之前可能需要 en_us_posix。
  • 您的屏幕截图和给定的代码不一样。您使用的是哪个代码?
  • 你的代码和你的截图不一样。函数setLocalizedDateFormatFromTemplate 用于将日期转换为字符串,而不是相反。
  • 用正确的图片和详细信息更新了问题@Fogmeister 和 Ankur Lahiry
  • @rakappdev 在解析固定日期格式时,您需要先将 DateFormatter 区域设置设置为“en_US_POSIX”,然后再设置其他属性。你也应该设置你的日期格式化日历,如果可能的话,设置它的 defaultDate。

标签: ios swift xcode date swift5.2


【解决方案1】:

将您的代码更改为:

let dateAsString = "13:15"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
dateFormatter.timeZone = TimeZone(abbreviation: "GMT+00:00")//Add this
let date = dateFormatter.date(from: dateAsString)
print(date!)

我的结果是:

2000-01-01 13:15:00 +0000

希望对你有帮助...

【讨论】:

  • 我仍然认为它为零。这是否与所有这些都发生在扩展中的事实有关?
  • 我的结果不是零。你确定你的代码和我的一样吗?
  • 显然这看起来像 Xcode/Swift 5.x 中的一个错误,因为如果我尝试打印日期对象,它不会显示 nil。然而,当尝试通过将鼠标悬停在变量上进行调试时,它显示为零,如问题中的附图所示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 2019-12-27
相关资源
最近更新 更多