2015-07-16 1 views
0
let stringWithDate = "2015-07-16T6:08:32.000Z" 

let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 

let dateComponents = NSDateComponents() 
dateComponents.year = 2015 
dateComponents.month = 7 
dateComponents.day = 16 
dateComponents.hour = 6 
dateComponents.minute = 8 
dateComponents.second = 32 

let dateFromDateFormatter = dateFormatter.dateFromString(stringWithDate) //"Jul 16, 2015, 8:08 AM" 
let dateFromDateComponents = NSCalendar.currentCalendar().dateFromComponents(dateComponents)! //"Jul 16, 2015, 6:08 AM" 

dateFromDateFormatter == dateFromDateComponents //false 

Pourquoi ces dates ne sont-elles pas les mêmes?Différence entre les sorties NSDate de NSDateFormatter et NSDateComponents

Répondre

1

Après quelques recherches, j'ai trouvé une solution:

NSDateFormatter comprend des informations sur NSTimeZone(Z à la fin de Sting) alors que NSDateComponents ne fonctionne pas. Nous devons donc simples informer dateComponents à propos NSTimeZone:

dateComponents.timeZone = NSTimeZone(abbreviation: "UTC") 

Les dates de sortie sont maintenant les mêmes.

Ajouter les mêmes informations à dateFormatter:

dateFormatter.timeZone = NSTimeZone(abbreviation: "UTC") 

ne change rien, car il y a des informations sur NSTimeZone encore.