1

ユーザーが日付を入力する UITextField を持つアプリをテストしていたので、入力された文字列を取得し、DateFormatter を使用して Date オブジェクトを生成しました。

この問題は、nil 値を返す文字列「10/15/2017」を変換しようとしたときに最初に発生しました。そこで、「2000 年 1 月 1 日」から「2020 年 12 月 31 日」までの文字列を生成するコードを作成したところ、毎年 10 月または 11 月頃に問題が発生していることがわかりました。nil 値を返すすべての日付を出力するコードを作成しました。

import UIKit
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .short
dateFormatter.locale = Locale(identifier: "en_US")

for day in 1...30 { // Generate the days
    for month in 1...12 { // Generate the months
        for year in 2000...2020 {
            if month == 2, day > 28 { // Check if month is february
               continue
            }
            str = "\(String(format: "%02d", month))/\(String(format: "%02d", day))/\(String(format: "%02d", year))"
            let date = dateFormatter.date(from: str)          
            if date == nil {
                print("\(str)")
            }
        }
    }
}

dateFormatまた、またはプロパティを変更しようとしましたが、locale一部のエントリで nil も取得しています。

dateFormatter.dateFormat = "MM/dd/yyyy"

このコード スニペットは、次を出力します。

11/02/2004
11/03/2002
11/05/2006
10/08/2000
10/14/2001
10/14/2007
10/15/2017
10/16/2005
10/16/2011
10/16/2016
10/17/2010
10/18/2009
10/18/2015
10/18/2020
10/19/2003
10/19/2008
10/19/2014
10/20/2013
10/20/2019
10/21/2012
10/21/2018

Xcode 8.3.3 と Swift 3 を使用しています。これは Swift/Xcode のバグですか、それとも何か間違っていますか?

4

1 に答える 1

1

ブラジル・フォール・シンドロームの可能性が高い

ブラジルでの夏時間の変更は深夜に行われます。秋に時計の針を進めると、午前 12 時 / 午前 0 時がないため、日付は になりnilます。

タイムゾーンを真夜中に夏時間の変更が行われない国に設定するか、時間を正午に設定します

于 2017-09-22T17:54:59.883 に答える