如何使用NSDateFormatter的isLenient选项?

时间:2016-09-27 16:53:47

标签: swift nsdateformatter swift3 foundation

我似乎无法在StackOverflow或网络上的其他地方找到有关此标志的任何信息。 Apple自己的文档只说:

  

如果将格式化程序设置为宽松,则在解析字符串时,它会使用启发式方法来猜测预期的日期。与任何猜测一样,它可能会使结果日期错误(即,除了预期的日期之外的日期)。

也许我误解了这应该如何运作,但我根本无法让它发挥作用。我的猜测是这样的(有一个相对容易解析的日期):

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

无论我尝试什么,我都没有。

我也看到了doesRelativeDateFormatting标志,声称支持“今天”和“明天”这样的短语",但这似乎没有做任何事情,要么:

> df.doesRelativeDateFormatting = true
> df.date(from: "today")
$R1: Date? = nil

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

以下是宽松选项产生影响的示例:

$Server

2015年不是闰年,因此没有2月29日 cls Remove-Variable server function ssssss { param ( [string][parameter(Mandatory = $true)]$server ) Write-Host $server } ssssss -server "Enter servername here" ,日期被解释为3月1日。 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) 被拒绝:

isLenient = true