swift - Swift - iOS - 将字符串转换为日期和问题
问题描述
我在 String 上有一个扩展,可以将我的日期字符串转换为 Swift 5.2 中的 Date 类型
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"
我要转换的 date_string 始终采用类似的格式:“May 5, 2020 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")
(这告诉日期格式化程序不要尝试为不同的本地日期格式约定调整日期格式。)
推荐阅读
- flutter - 如何实现长按弹出菜单和拖动同时在网格上重新排序?
- python - 为什么 python 多处理对单核进程的结果略有不同?
- google-chrome-extension - 无需单击即可自动执行 chrome 扩展
- html - 如何使用引导程序在一行中的列之间垂直间隔
- config - 如何在工作台模式下创建可视化图形配置
- python - 如何在 python opencv 上启用自动曝光
- css - 地图内的样式化组件道具
- pandas - 在 pandas 数据框中搜索特定值并在其上写入条件
- javascript - Axios MySql DELETE/UPDATE 不工作或提供错误
- javascript - 我希望我的 window.open 带有 jQuery 中的 post 请求