无法在 Swift 中将日期格式转换为显示日期
Posted
技术标签:
【中文标题】无法在 Swift 中将日期格式转换为显示日期【英文标题】:Can't Convert Date Format Into Display Date In Swift 【发布时间】:2020-11-18 00:43:08 【问题描述】:我一直在尝试采用“Thu Nov 12 2020 07:00:00 GMT+0000(格林威治标准时间)”格式保存的日期,并将其转换为“MMM d, yyyy”的格式,但是我没有成功。
import Foundation
extension String
// Example date read in from database.
// "Thu Nov 12 2020 07:00:00 GMT+0000 (Greenwich Mean Time)"
func convertToDate() -> Date?
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "E, d MMM yyyy HH:mm:ss Z"
dateFormatter.locale = Locale(identifier: "en_US_POSSIX")
dateFormatter.timeZone = .current
return dateFormatter.date(from: self)
func convertToDisplayFormat() -> String
guard let date = self.convertToDate() else return "N/A"
return date.convertToMonthDayTimeFormat()
import Foundation
extension Date
func convertToMonthDayTimeFormat() -> String
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM d, yyyy"
print(dateFormatter.string(from: self))
return dateFormatter.string(from: self)
然后在我读取数据的文件中,代码是
cell.appointmentTime?.text = "\(tableData.date!.convertToDisplayFormat())"
【问题讨论】:
【参考方案1】:在设置 dateFormat 之前,您应该始终将 dateFormat 语言环境设置为 "en_US_POSIX"
。顺便说一句,您从数据库读取的日期字符串似乎始终采用 UTC 格式,如果是这种情况,您应该将 dateFormatter 时区设置为零 secondsFromGMT 并转义您的日期字符串时区:
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSSIX")
dateFormatter.dateFormat = "EEE MMM dd yyyy HH:mm:ss 'GMT+0000 (Greenwich Mean Time)'"
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
dateFormatter.date(from: "Thu Nov 12 2020 07:00:00 GMT+0000 (Greenwich Mean Time)")
您还应该创建一个静态日期格式化程序,以避免每次调用此方法时都创建一个新的:
extension Formatter
static let customDate: DateFormatter =
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSSIX")
dateFormatter.dateFormat = "EEE MMM dd yyyy HH:mm:ss 'GMT+0000 (Greenwich Mean Time)'"
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
return dateFormatter
()
static let yyyyMMMd: DateFormatter =
let dateFormatter = DateFormatter()
dateFormatter.setLocalizedDateFormatFromTemplate("yyyyMMMd")
return dateFormatter
()
extension String
func convertToDate() -> Date?
Formatter.customDate.date(from: self)
func convertToDisplayFormat() -> String
convertToDate()?.convertToMonthDayTimeFormat() ?? "N/A"
extension Date
func convertToMonthDayTimeFormat() -> String
Formatter.yyyyMMMd.string(from: self)
游乐场测试:
"Thu Nov 12 2020 07:00:00 GMT+0000 (Greenwich Mean Time)".convertToDisplayFormat() // "Nov 12, 2020"
【讨论】:
以上是关于无法在 Swift 中将日期格式转换为显示日期的主要内容,如果未能解决你的问题,请参考以下文章
如何在swift(ios)中将字符串格式的日期转换为另一种字符串格式[重复]
无法在JavaScript中将String BST日期格式转换为UTC