我似乎找不到任何关于这个标志的信息,在stackoverflow或其他网站上。苹果自己的文档只说:
如果格式化程序设置为宽松,则在分析字符串时,它使用启发式来猜测预期的日期。与任何猜测一样,它可能会得到错误的结果日期(即,不是预期的日期)。
也许我误解了这是怎么工作的,但我根本无法让它工作。我的猜测是这样的(有一个相对容易分析的日期):

> import Foundation
> let df = DateFormatter()
> df.isLenient = true
> df.date(from: "12:00 1/1/2001")
$R0: Date? = nil

不管我做什么,我都得不到。
我还看到有一个doesRelativeDateFormatting标志,它声称支持“today”和“tomorrow”之类的短语,但这似乎也没有任何作用:
> df.doesRelativeDateFormatting = true
> df.date(from: "today")
$R1: Date? = nil

有什么想法吗?

最佳答案

下面是一个例子,在这个例子中,宽容的选择会产生影响:

let df = DateFormatter()
df.timeZone = TimeZone(secondsFromGMT: 0)
df.isLenient = true
df.dateFormat = "yyyy-MM-dd"
print(df.date(from: "2015-02-29")) // Optional(2015-03-01 00:00:00 +0000)

2015年不是闰年,所以没有2月29日。与
isLenient = true,日期解释为3月1日。
如果isLenient = false则被拒绝:
let df = DateFormatter()
df.timeZone = TimeZone(secondsFromGMT: 0)
df.isLenient = false
df.dateFormat = "yyyy-MM-dd"
print(df.date(from: "2015-02-29")) // nil

07-26 09:37