DateFomatter
无法从“1995-03-26”字符串初始化日期。我还尝试使用不同的时区,一切正常,但不适用于这个特定的时区。这种奇怪行为的原因是什么?
import Foundation
let serverLocalDateFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-d"
formatter.timeZone = TimeZone(secondsFromGMT: 60 * 60 * 2)
return formatter
}()
let serverLocalDateFormatter2: DateFormatter = {
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-d"
formatter.timeZone = TimeZone(identifier: "Europe/Sofia")
return formatter
}()
let testCase1 = "1995-03-26"
let testCase2 = "1995-03-27"
let testCase3 = "1995-03-25"
serverLocalDateFormatter.date(from: testCase1)
serverLocalDateFormatter2.date(from: testCase1)
serverLocalDateFormatter.date(from: testCase2)
serverLocalDateFormatter.date(from: testCase3)
我创建了日期格式化程序,并使用`date(from: String)方法从后端返回的字符串中获取日期,但只能解析一个特定的日期。
格式化程序假定字符串表示时间为 00:00:00 的日期,但保加利亚时区中不存在日期时间 1995-03-26T00:00:00,因为 这是保加利亚转换为夏令时的时间1995 年,从 00:00:00 开始“跳过”整整一个小时。
您可以将
isLenient
设置为 true,使其返回 1995 年 3 月 26 日这一天的开始时间,即凌晨 1 点。
formatter.isLenient = true
让格式化程序宽松还允许成功解析其他“格式错误”的日期,例如“1995-03-32”,但由于这似乎正在解析来自服务器的日期,因此这应该不会太重要。