extension Formatter {
static let iso8601: DateFormatter = {
let formatter = DateFormatter()
formatter.calendar = Calendar(identifier: .iso8601)
formatter.timeZone = TimeZone.init(identifier: "America/New_York")
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
return formatter
}()
}
extension Date {
var iso8601: String {
return Formatter.iso8601.string(from: self)
}
}
extension String {
var dateFromISO8601: Date? {
return Formatter.iso8601.date(from: self) // "Mar 22, 2017, 10:22 AM"
}
}
let dateFormat:String = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
let strDate: String = "2017-10-09T00:00:00.966Z"
if let dateFromString = strDate.dateFromISO8601
{
print(dateFromString.iso8601)
}
好了,所以它不會做與dateFormatter.date(來源:sweDate)什麼)呢!? 如何獲取日期字符串值?斯威夫特日期時區問題
根據我所知,日期不存儲時區,因此它總是打印UTC時間,不管我在格式化時使用了哪個時區。
那麼什麼是解決方案,因爲我必須將我的本地日期與轉換日期進行比較。我無法與字符串進行比較。 任何幫助表示讚賞。
「YYYY-MM-dd'T'HH:MM:ss.SSS'Z'原」是錯的。通過轉義Z,它不會考慮日期字符串中的時區。 Z表示UTC。如果你轉義Z,它會將你的日期字符串解釋爲本地時間,這是錯誤的 –
你可以設置一個不同的時區,但是當用包含時區的日期格式解析你的日期時也不會有什麼區別。「」yyyy- MM-dd'T'HH:mm:ss.SSSZ「'檢查此https://stackoverflow.com/a/28016692/2303865。您可以使用TimeZone將日期轉換爲具有特定語言環境的字符串。 –
@LeoDabus我認爲這是沒有問題的Z即使我逃脫Z它仍然輸出錯誤的日期 –