2

文字列拡張関数を使用して日付文字列を変換しています。機能は次のとおりです。

func convertDateString() -> String {
    let dateFormater = DateFormatter()
    var returnString = ""
    dateFormater.dateFormat = "yyyy-MM-dd'T'hh:mm:ss'Z'"    // Takes the format from the JSON journal entry for elite dangerous
    dateFormater.locale = Locale.current
    if let dateObj = dateFormater.date(from: self) {
    dateFormater.dateFormat = "dd MMM yyyy  hh:mm:ss"       // Converts it to a new string (as a date object)
        returnString = dateFormater.string(from: dateObj)   // Converts the date object back to a string
    } else {
        returnString = "Error converting date"
    }
    return returnString
}

JSON参照ファイルからの結果の一部を変換するために、文字列拡張子を呼び出す一連のJSONオブジェクトであるデータセットを使用しています。

MACPRO と MacBookAir の 2 台のマシンで作業しています。どちらも同じバージョンの MacOS (10.12.5) と同じバージョンの Xcode を実行しています。

MACPRO でアプリを実行すると、問題なく JSON オブジェクト ファイルが解析され、上記の関数で期待どおりにすべての日付が正しく変換されます。ただし、MacBookAir でまったく同じデータファイルでアプリを実行すると、JSON オブジェクト ファイルは問題なく解析されているように見えますが、日付の一部 (数パーセント) が期待どおりに変換されません。if let dateObj = dateFormater.date(from: self)ステートメントに失敗し、 「日付の変換エラー」として返されます。

私は何が起こっているのかを理解するのに途方に暮れています。を削除してみdateFormater.locale = Locale.currentましたが、違いはありません。

同じ JSON オブジェクトがエラーを生成します (つまり、ファイルを実行するたびに、「日付の変換エラー」応答を生成するのは同じ JSON オブジェクトです)。JSON オブジェクト ファイルをテキスト エディターで見ると、JSON オブジェクトに問題はないように見えます (オンラインの JSON オブジェクト フォーマッターでも確認したところ、JSON オブジェクトが正しく読み取られます)。

また、SwiftyJSON を使用して JSON オブジェクトを解析していることも付け加えておきます。

感謝して受け取った助けや提案。

コードをより堅牢にする方法はありますか? アプリのデータファイル、Xcode、およびMacOSがすべて同じであることを考えると、異なるマシンが違いを生む理由を誰かが示唆できますか。

4

2 に答える 2

0

回答してくれたすべての人に感謝します。

Code Different で参照されている記事を読み、David が提起した問題に焦点を当てると、次の行がコードに追加されます。

    dateFormater.calendar = Calendar(identifier: .iso8601)
    dateFormater.locale = Locale(identifier: "en_US_POSIX")
    dateFormater.timeZone = TimeZone(secondsFromGMT: 0)

dateFormater.locale = Locale.current' ' 行の代わりに。今では完全に機能し、デバイス間で問題なく交換できます。

于 2017-05-25T14:19:53.377 に答える