我已经格式化了一个基本转换的字符串,而且我的日期完全不同。
import UIKit
extension String {
func toDate(dateFormat: String) -> Date {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = dateFormat
return dateFormatter.date(from: self)!
}
}
let date = "01/24/2018 09:59:24"
print(date.toDate(dateFormat: "MM/dd/YYYY hh:mm:ss"))
为什么它减少了大约一个月零一小时?
修改
import UIKit
extension String {
func toDate(dateFormat: String) -> Date {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = dateFormat
dateFormatter.timeZone = TimeZone.current
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
return dateFormatter.date(from: self)!
}
}
extension Date {
func toString(_ format: String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format
dateFormatter.timeZone = TimeZone.current
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
return dateFormatter.string(from: self)
}
}
let date = Date().toString("MM/dd/yyyy hh:mm:ss")
print(date)
print(date.toDate(dateFormat: "MM/dd/yyyy hh:mm:ss"))
RESULT
01/24/2018 12:48:33
2018-01-23 23:48:33 +0000
答案 0 :(得分:1)
设置区域设置和时区以避免无效结果。扩展名的返回值应为Date?
,因为字符串可能不是有效日期。
由于dateFormat
不是可选的,因此它应该是有效的日期格式,有关详细信息,请参阅here。
import UIKit
extension String {
func toDate(dateFormat: String, locale : Locale? = nil, timezone: TimeZone? = nil) -> Date? { //locale and timezone are optional with a default nil value
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = dateFormat
dateFormatter.locale = locale
dateFormatter.timeZone = timezone
return dateFormatter.date(from: self)
}
}
您可以像这样使用它:
let string = "01/24/2018 09:59:24"
let myLocale = Locale(identifier: "en_US_POSIX")
let myTimeZone = TimeZone(abbreviation: "PCT")
print(string.toDate(dateFormat: "MM/dd/yyyy HH:mm:ss",
locale: myLocale,
timezone: myTimeZone))