swift - objective - ¿Cómo se usa la opción isLenient de NSDateFormatter?
swift 4 dateformatter example (1)
Aquí hay un ejemplo donde la opción indulgente hace la diferencia:
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 no es un año bisiesto, por lo que no hay 29 de febrero. Con isLenient = true
, la fecha se interpreta como 1 de marzo. Con isLenient = false
, se rechaza:
let df = DateFormatter()
df.timeZone = TimeZone(secondsFromGMT: 0)
df.isLenient = false
df.dateFormat = "yyyy-MM-dd"
print(df.date(from: "2015-02-29")) // nil
Parece que no puedo encontrar información sobre esta bandera, en StackOverflow o en otro lugar en la web. La propia documentación de Apple solo dice:
Si un formateador se establece para ser indulgente, al analizar una cadena utiliza heurística para adivinar la fecha que se pretende. Al igual que con cualquier adivinanza, es posible que la fecha del resultado sea incorrecta (es decir, una fecha distinta de la prevista).
Tal vez estoy malinterpretando cómo se supone que funciona, pero no puedo hacer que funcione en absoluto. Mi suposición fue algo como esto (con una fecha relativamente fácil de analizar):
> import Foundation
> let df = DateFormatter()
> df.isLenient = true
> df.date(from: "12:00 1/1/2001")
$R0: Date? = nil
No importa lo que intento, obtengo nada.
También veo que hay una bandera doesRelativeDateFormatting
, que dice que admite frases como "hoy" y "mañana" ", pero eso tampoco parece hacer nada:
> df.doesRelativeDateFormatting = true
> df.date(from: "today")
$R1: Date? = nil
¿Algunas ideas?