2016-12-22 13 views
0

同様のSOの質問を見て、Swiftには答えがないことが判明しました。日付文字列の配列を日付オブジェクトの配列に変換する方法Swift

私は以下のような日付文字列の配列を持っている:

let dateStrings = ["2016-12-22T08:00:00-08:00", "2016-12-22T08:15:00-08:00", "2016-12-22T08:30:00-08:00"] 

私は以下

var dateObjects = [2016-12-22 21:30:00 +0530, 2016-12-22 21:45:00 +0530, 2016-12-22 22:00:00 +0530] 

私はを反復処理しようとしたようなローカルDateオブジェクトの配列に変換したいと思います日付文字列の配列ですが、私はこのエラーが発生します:

"fatal error: unexpectedly found nil while unwrapping an Optional value"

私はオプションのバインディングw成功なし。私が間違っているかもしれないアドバイスをしてください。第2のケースで

var dateObjects = [Date]() 
let dateFormatter = DateFormatter() 
for date in dateStrings{ 
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 
    let dateObject = dateFormatter.date(from: date) 
    self.dateObjects.append(dateObject!) // ERROR LINE 
} 

私は「日付オブジェクトに変換することができません」のは、else文の印刷を通過結合オプションを試す

for date in dateStrings{ 
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 
    if let dateObject = dateFormatter.date(from: date){ 
     self.dateObjects.append(dateObject!) // ERROR LINE 
    } 
    else{ 
     print("Unable to convert to date object") 
    } 
} 
+1

ちょっと私にはすべてがうまく動作する、あなたのコードを実行しました。エラーではありません。それはエラーを引き起こす行ですか? –

+0

興味深いことに、あなたのコードは私のために働いています... –

+0

'self.dateObjects.append(dateObject!)'を使う必要はありません 'dateObjects.append(dateObject!)'のみを使用しても動作します –

答えて

6

あなたは力あるの必要がない非オプション値を包みますあなたはインスタンスプロパティとして宣言されていないdateObjects varを使って自分自身を書いていますが、flatMapを使用してコードを減らし、の配列をStringから作成することもできます。

let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" 
let dateObjects = dateStrings.flatMap { dateFormatter.date(from: $0) } 
1

これを試してください:日付オブジェクトはローカル変数ですので、自己を削除してください。あなた自身を使用したい場合は、それをグローバルにしてください

let dateStrings = ["2016-12-22T08:00:00-08:00", "2016-12-22T08:15:00-08:00", "2016-12-22T08:30:00-08:00"] 

    var dateObjects = [Date]() 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 

    for date in dateStrings{ 
     let dateObject = dateFormatter.date(from: date) 
     dateObjects.append(dateObject!) 
    } 

    print(dateObjects) 
1

自己をdateObjectsから単に削除してください。

dateObjectsはローカル変数です。したがって、dateObjectsで自己を使用しないでください。

var dateObjects = [Date]() 
let dateFormatter = DateFormatter() 
for date in dateStrings{ 
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 
    let dateObject = dateFormatter.date(from: date) 
    dateObjects.append(dateObject!) 
} 
0

これを試してみてください。..

スウィフト3

let dateStrings = ["2016-12-22T08:00:00-08:00", "2016-12-22T08:15:00-08:00", "2016-12-22T08:30:00-08:00"] 

func convertDate(str: String) -> Date { 
    let dateFormatter = DateFormatter() 
     dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssxxx" 
     let dateObject = dateFormatter.date(from: str) 
    return(dateObject!) 
} 

var stringDates : [Date] = [] 

for date in dateStrings { 
    stringDates.append(convertDate(str: dateStrings[0])) 
} 
+1

良い回答は問題の内容を説明し、良い答えはその答えがどのように問題を解決するかを説明します。コードのみの回答はここでは眉をひそめます。 – rmaddy

関連する問題