2017-07-20 7 views
0

私は、dateformatterを使用して、UIDatePickerを介して日付を入力するための文字列型と日付型の間の日付を変換しています。日付の保存された文字列が存在する場合にビューがロードされると、日付テキストフィールドに入れられます(正しく入力されます)。 dateformatterが文字列を日付に変換すると、日付が間違って返されます。 (前年の12月は、必ず20ish。)日付フォーマッタが1つずつ減算し、文字列から日付への変換時に日が変わる

let df = DateFormatter() 
df.dateFormat = "MM/dd/YYYY" 

func setDatePickerDate() { 
    if dobText.text != "" { 
     print("\n\nSaved date as string: \(dobText.text!)") 
     let testDate = df.date(from:dobText.text!) 
     print("Saved date converted to date: \(testDate!)") 
     print("Date converted back to string: \(df.string(from: testDate!))") 
     dobPicker?.date = df.date(from: dobText.text!)! 
    } 
} 

返します

文字列として保存された日付:1977年6月7日 保存された日付が日付に変換:1976年12月19日06: 1976年12月19日

をし、私はそれが年を減算し、日を変え続けるsetDatePicker機能を実行し続ける場合:0:00 0000 日は、文字列に変換しました。

文字列として保存された

日:1975年12月21日

:1975年12月21日午前6時00分00秒0000 日付が文字列に変換:1976年12月19日 保存された日付が日付に変換文字列として保存された

日:1975年12月21日 保存された日付が日付に変換は:1974年12月22日

等:1974年12月22日午前6時00分00秒0000 日は、文字列に変換しました

編集:ちょうど19-25の間の日を循環することに気付きました.25に達するまでの日付に1を加えて19に戻ります。

答えて

0

"MM/dd/yyyy"に変更してください。 。

Unicode Technical Standard #35 Locale Data Markup Languageの大文字の「Y」は、1週間の境界で年の移行が発生する「週の週」ベースのカレンダーを指します。ほとんどのアプリケーションでは、小文字の「y」が必要です。これは、標準的な数字の暦年を指します。

関連する問題