2017-10-28 5 views
1

Ich habe ein Array zu konvertieren, calendarFromDateArr, die sich wie folgt:wie Array String bisher swift 3

["2017-10-30T07:41:00", "2017-10-30T11:23:00", "2017-10-30T11:48:00", "2017-11-10T00:00:00", "2017-11-13T19:43:00", "2017-12-01T00:00:00", "2017-12-31T00:00:00"] 

ich diesen Code verwende aber dateObjects sind nil.

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

print(dateObjects) 

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

    print(dateObjects) 
} 

Ich verwende diesen Code auch Daten sind jedoch nil.

+0

Neben der 'Z' zu entfernen und die' timeZone'-Eigenschaft, wie cldrr unten weist darauf hin, auch 'set locale' auf' en_US_POSIX', zB 'dateFormatter.locale = Gebietsschema (Bezeichner:" en_US_POSIX ")', gemäß [Technical Q & A 1480] (https://developer.apple.com/library/content/qa/qa1480/_index.html). – Rob

+0

Auch, in der zweiten Hälfte Ihrer Frage nicht verwandt, vermeiden Sie das Setzen von "dateFormat" innerhalb der Schleife. Die Einstellung von "dateFormat" (oder die Instanziierung neuer Datumsformatierer) ist sehr kostspielig, also vermeiden Sie es in einer Schleife, wenn Sie können. In diesem Fall stellen Sie einfach die Formatzeichenfolge vor der Schleife ein und Sie sind golden. – Rob

Antwort

0

Weil Sie Datumsformat String ist falsch sind, dann Sie keine Zone in Ihrem Datum Strings haben (das Z steht für die Zeitzone: http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns)

Dieses Beispiel hier arbeitet völlig in Ordnung:

let dates = ["2017-10-30T07:41:00", "2017-10-30T11:23:00", "2017-10-30T11:48:00", "2017-11-10T00:00:00", "2017-11-13T19:43:00", "2017-12-01T00:00:00", "2017-12-31T00:00:00"] 

let dateFormatter = DateFormatter() 
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0) 
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss" 
let dateObjects = dates.flatMap { dateFormatter.date(from: $0) } 

print(dateObjects) 

Ausgang:

[2017-10-30 07:41:00 +0000, 2017-10-30 11:23:00 +0000, 2017-10-30 11:48:00 +0000, 2017-11-10 00:00:00 +0000, 2017-11-13 19:43:00 +0000, 2017-12-01 00:00:00 +0000, 2017-12-31 00:00:00 +0000]