Swift - iOS - 将字符串转换为日期并发出

问题描述

我在 String 上有一个扩展,可以将我的日期字符串转换为 Swift 5.2 中的日期类型

extension String {
  func toDate(withFormat format: String = "MMM d,YYYY HH:mm:ss a") -> Date {
    let dateFormatter = DateFormatter()
    dateFormatter.locale = Locale(identifier: "en_US")
    dateFormatter.calendar = Calendar(identifier:  .iso8601)
    dateFormatter.timeZone = .current
    dateFormatter.dateFormat = format
    guard let date = dateFormatter.date(from: self) else {
      preconditionFailure("Check the format!!!")
    }
    return date
  }
}

当我尝试转换我的 date_string 时总是错误的(检查下面):

var sampleDate = "May 5,2021 1:34:15 AM"
let newDate = sampleDate.toDate()
print(newDate) //prints: "2020-12-28 05:34:15 +0000\n"

我要转换的日期字符串始终采用类似的格式:“2020 年 5 月 5 日 9:20 5:39:15 PM”

知道哪里出了问题吗?我玩过本地,日历,时区,但没有用!我现在在美国东海岸时区。

谢谢, 凸轮

解决方法

你的 DateFormatter 的 dateFormat 应该是 "MMM d,yyyy hh:mm:ss a"

(“yyyy”代替“YYYY”和“hh”代替“HH”)

那行得通。

编辑:

或者,正如 Leo 在评论中指出的那样,"MMM d,yyyy h:mm:ss a"(只有一个 h)会更好,而且使用起来更安全

dateFormatter.locale = Locale(identifier: "en_US_POSIX")

(这告诉日期格式化程序不要尝试为不同的本地日期格式约定调整日期格式。)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...