簡體   English   中英

iOS Swift 3:將“yyyy-MM-dd'T'HH:mm:ssZ”格式字符串轉換為日期對象

[英]iOS Swift 3 : Convert “yyyy-MM-dd'T'HH:mm:ssZ” format string to date object

你好,我有一本字典

self.publishedAt = dictionary["publishedAt"] as? NSString

其中我得到日期“ 2017-01-27T18:36:36Z ”。 我想將其轉換為可讀格式: dd-MM-yyyy hh:mm:ss 我試過

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy hh:mm:ss"
let date = dateFormatter.date(from: (self.publishedAt as? String)!)
print("EXACT_DATE : \(date)") 

但是變成零。 :(

以簡單格式獲取日期的正確方法是什么?

您需要輸入格式將 ISO8601 字符串轉換為日期,並需要輸出格式將日期轉換回字符串:

let string = "2017-01-27T18:36:36Z"

let dateFormatter = DateFormatter()
let tempLocale = dateFormatter.locale // save locale temporarily
dateFormatter.locale = Locale(identifier: "en_US_POSIX") // set locale to reliable US_POSIX
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
let date = dateFormatter.date(from: string)!
dateFormatter.dateFormat = "dd-MM-yyyy HH:mm:ss"
dateFormatter.locale = tempLocale // reset the locale
let dateString = dateFormatter.string(from: date)
print("EXACT_DATE : \(dateString)")

將字符串轉換為Date對象:

let string = "2017-01-27T18:36:36Z"
let isoFormatter = ISO8601DateFormatter()
let date = isoFormatter.date(from: string)!

或者,如果您需要支持早於ISO8601DateFormatter iOS 版本:

let isoFormatter = DateFormatter()
isoFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssX"
isoFormatter.locale = Locale(identifier: "en_US_POSIX")
isoFormatter.timeZone = TimeZone(secondsFromGMT: 0)
let date = isoFormatter.date(from: string)!

(要了解我們為 ISO 8601 日期格式化程序設置locale設置的原因,請參閱Apple 技術問答 1480。

然后,要將其轉換為用戶友好的日期格式,您將使用單獨的格式化程序(或使用上面的第二個示例,您可以重新使用格式化程序,但請記住將locale重置回Locale.current ):

let formatter = DateFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .medium
let result = formatter.string(from:date)

請注意,我建議在向用戶顯示日期而不是dateFormat字符串時使用這些樣式參數,因此它使用適合其語言環境的樣式,而不是假設他們是否需要 24 小時時鍾和/或是否使用dd-MM-yyyyMM-dd-yyyy格式。


請注意,更改日期格式化程序的格式(例如更改dateFormat字符串)是一個相對昂貴的過程,因此如果您要為多個日期執行此過程,請不要使用單個DateFormatter並不斷地來回反復更改其dateFormat或樣式(或者更糟的是,為每個日期實例化新的格式化程序)。 相反,為每種日期格式樣式創建一個格式化程序,並盡可能多地重復使用它的語法。

剛剛在您的代碼中使用了該函數(swift 4.2)。

public func convertDateFormatter(date: String) -> String {

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"//this your string date format
dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone!
dateFormatter.locale = Locale(identifier: "your_loc_id")
let convertedDate = dateFormatter.date(from: date)

guard dateFormatter.date(from: date) != nil else {
    assert(false, "no date from string")
    return ""
}
dateFormatter.dateFormat = "HH:mm a"///this is what you want to convert format
dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone!
let timeStamp = dateFormatter.string(from: convertedDate!)
print(timeStamp)
return timeStamp
}

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM