2016-09-27 2 views
1

私はこのフラグ、StackOverflowまたはWeb上の他の場所に情報を見つけることができません。 Appleのドキュメントには、NSDateFormatterのisLenientオプションはどのように使用されますか?

と書かれています。フォーマッタが寛大であると設定されている場合、文字列を解析するときにヒューリスティックを使用して、意図した日付に推測します。推測と同様に、結果の日付が間違っている可能性があります(つまり、意図された日付以外の日付)。

多分、私はこれがどのように動作するのか誤解しているかもしれませんが、まったく動作しません。私の推測は次のようなものでした(パースするのは比較的簡単な日付です):

> 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

あなたはおそらく探しているものNSDataDetector http://stackoverflow.com/questions/32595651/convert-from-date-です文字列の不明な形式/ 32595941#32595941 –

+0

レオ:いいですよね。私は 'allowsNaturalLanguage'を置き換えようとしています。' 'Natural Language Support ''セクションの' lenient'の隣にあります。 –

答えて

2

は寛大オプションが違いを作る例です。

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は、日付がisLenient = falseで3月1日 と解釈され、それは拒否されます。

let df = DateFormatter() 
df.timeZone = TimeZone(secondsFromGMT: 0) 
df.isLenient = false 
df.dateFormat = "yyyy-MM-dd" 
print(df.date(from: "2015-02-29")) // nil 
+0

興味深い。私はちょっと混乱します。これは "自然言語サポート"とは何が関係していますか?それとも、ドキュメンタリーの膨大なものですか? –

+0

@ J.Cocoe:わかりません。この例は、isLenientの使用方法を示していますが、allowsNaturalLanguageの置き換えに関する質問には答えません。 –

+0

@ J.Cocoe:実際の問題*がallowsNaturalLanguageの置き換え方法である場合、それに応じて質問とタイトルを更新する必要があります。現在のところ、あなたは "isLenient"について尋ねているだけなので、XY問題でそれが可能です。 –

関連する問題