我想將字串轉換為日期,然后再次回傳一個字串。我做了這個擴展,但是當我使用它時它不能正常作業。
例如,如果我有“2020-12-10”,結果應該是“10 de Diciembre de 2020”,但是我總是得到相同的結果“22 de Diciembre de 2021”并且它不正確。
這是我的代碼:
extension String {
func dateFormatter(style: DateFormatter.Style) -> String? {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
formatter.timeZone = .current
formatter.dateStyle = style
formatter.locale = Locale(identifier: "es_AR")
return formatter.string(from: Date())
}
}
let dateExample = "2022-09-08" // This should be "8 de Septiembre de 2022"
let dateFormat = dateExample.dateFormatter(style: .long) // here i get "22 de diciembre de 2021"
uj5u.com熱心網友回復:
嘗試解碼日期字串時,擴展實體方法中的主要問題是您沒有使用 self它表示正在呼叫該方法的字串實體。另一個問題是,在決議固定日期格式字串時,您應該在設定 dateFormat 之前將日期格式化程式的語言環境設定為“en_US_POSIX”。這將使您的日期格式化程式忽略設備區域設定和設定。另請注意,如果您在實體方法中宣告格式化程式,則每次呼叫此方法時都會創建一個新的格式化程式(這是一項昂貴的操作)。在決議沒有時間的日期時使用設備的當前時區時也要小心。確保它真的是你想要的。另一個問題是 dateStyle。您應該使用 dateFormat 或日期/時間樣式。不是他們兩個。在決議固定日期格式時使用 dateFormat 并在向用戶顯示日期時使用日期/時間樣式,如下所示帖子:
extension Formatter {
static let yyyMMdd: DateFormatter = {
let formatter = DateFormatter()
formatter.calendar = Calendar(identifier: .iso8601)
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd"
return formatter
}()
}
extension String {
var yyyMMddToDate: Date? {
Formatter.yyyMMdd.date(from: self)
}
}
let dateExample = "2022-09-08"
if let date = dateExample.yyyMMddToDate {
print(date.description(with: .current)) // "Thursday, September 8, 2022 at 12:00:00 AM Brasilia Standard Time\n"
}
uj5u.com熱心網友回復:
這主要是因為您總是Date()在此行上轉換新物件:return formatter.string(from: Date())。
將該行更改為return formatter.string(from: self)應該修復它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/390818.html
標籤:ios 迅速 字符串 nsdateformatter 日期格式化程序
下一篇:通過Swift呼叫WebAPI
