我從服務器收到日期時間作為字串。如果日期時間是夏令時發生的確切時間,我無法決議日期。如何處理日期時間字串"2022-03-13T02:00:00.000000"
輸出:
2022-03-13 05:00:00 0000
2022-03-13 06:59:00 0000
failed
2022-03-13 07:00:00 0000
2022-03-13 08:00:00 0000
代碼:
extension String {
func date(using format: String) {
let df = DateFormatter()
df.dateFormat = format
df.timeZone = .current
if let date = df.date(from: self) {
print(date)
}
else {
print("failed")
}
}
}
"2022-03-13T00:00:00.000000".date(using: "yyyy-MM-dd'T'HH:mm:ss.SSSSSS")
"2022-03-13T01:59:00.000000".date(using: "yyyy-MM-dd'T'HH:mm:ss.SSSSSS")
"2022-03-13T02:00:00.000000".date(using: "yyyy-MM-dd'T'HH:mm:ss.SSSSSS")
"2022-03-13T03:00:00.000000".date(using: "yyyy-MM-dd'T'HH:mm:ss.SSSSSS")
"2022-03-13T04:00:00.000000".date(using: "yyyy-MM-dd'T'HH:mm:ss.SSSSSS")
uj5u.com熱心網友回復:
您只需要設定日期格式化程式的日歷屬性。這也將避免使用可能導致決議錯誤年份的用戶設備日歷。決議固定日期格式時,不要忘記始終將日期格式化程式的語言環境設定為“en_US_POSIX”:
extension String {
func date(using format: String) -> Date? {
let df = DateFormatter()
df.calendar = .init(identifier: .iso8601)
df.locale = .init(identifier: "en_US_POSIX")
df.timeZone = .current
df.dateFormat = format
df.date(from: self)
}
}
另請注意,每次呼叫此方法時,此方法都會創建一個新的日期格式化程式。您應該避免這種情況以及創建靜態格式化程式。我還要確保日期字串是否使用當前時區。通常是 UTC 時區。
uj5u.com熱心網友回復:
采用ISO8601DateFormatter將這些字串轉換為日期,然后當您需要將它們顯示到您的應用程式中時,請使用設定為所需時區的日期格式化程式。
這樣一來,夏令時轉換就不會有任何問題。
當然,當您需要將日期重新編碼為String用于傳輸時,再次使用ISO8601DateFormatter以保持用于接收它們的相同格式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/442406.html
