2017-10-11 5 views
0
let dateString = "2017-10-08T00:12:00.000Z" 
let formatter = DateFormatter() 
formatter.calendar = Calendar(identifier: .iso8601) 
formatter.locale = Locale(identifier: "en_US_POSIX") 
formatter.timeZone = TimeZone(secondsFromGMT: 0) 
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX" 


let date = formatter.date(from: dateString)! 



let components = Calendar.current.dateComponents(in: TimeZone(identifier: "America/New_York")!, from: date) 

print("Day - \(components.day!)") 
print("Month - \(components.month!)") 
print("Year - \(components.year!)") 

print("Hour - \(components.hour!)") 
print("Min - \(components.minute!)") 
print("Second - \(components.second!)") 


print("Final Date - \(components.date!)") 

En exécutant le code ci-dessus je suis la sortiemauvaise date est Affichage de DateComponets

jour - 7
Mois - 10
Année - 2017
Heure - 20
min - 12
Deuxième - 0
Date finale - 2017-10-08 00:12:00 +0000
Mais ma date prévue devrait être
Date de finale - 2017-10-07 20:12:00 +0000

+0

Votre date est correcte. Pourquoi pensez-vous que la date finale devrait être différente de la chaîne de date d'origine? –

+0

Une date c'est juste un moment dans le temps. Il n'a pas de fuseau horaire. –

+0

les composants reflètent la date originale. Vous devriez aussi imprimer le composant de fuseau horaire –

Répondre

0

I GOT SOLUTION AS @Leo Dabus dire problème avec si Timezone

let dateString = "2017-10-08T00:12:00.000Z" 
    let formatter = DateFormatter() 
    formatter.calendar = Calendar(identifier: .iso8601) 
    formatter.locale = Locale(identifier: "en_US_POSIX") 
    formatter.timeZone = TimeZone(secondsFromGMT: 0) 
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX" 


    let date = formatter.date(from: dateString)! 

    let components = Calendar.current.dateComponents(in: TimeZone(identifier: "America/New_York")!, from: date) 

    //Converting part 
    let gregorian = Calendar(identifier: .gregorian) 
    var dateComponents = components 
    dateComponents.timeZone = TimeZone.init(identifier: "UTC") //Here is the logic 
    let myDate = gregorian.date(from: dateComponents)! 
    print(myDate) 

Maintenant, je reçois la date convertie en sortie. 2017-10-07 20:12:00 +0000

+0

Ceci est faux Vous ne devriez pas obtenir '2017-10-07 20:12:00 + 0000' à la suite –

+0

ajouter à votre code d'origine' formatter.timeZone = TimeZone (Identifiant: "Amériques/New York") ' ' formatter.string (de: components.date!) ' –

+0

pourquoi je ne vais pas la date qui est à new york –