12
votes

Convertir Date String Swift

J'ai une chaîne de date dans ce format: xxx

et j'ai besoin de le changer à quelque chose comme ceci: xxx

précédemment J'ai toujours utilisé cette bibliothèque -> SwiftDate pour manipuler les dates , mais ça ne marche pas maintenant.

J'ai essayé aussi quelque chose comme: xxx

mais ça ne marche pas. Comment puis-je faire?

Merci d'avance.


6 commentaires

Le format de date "AAAAY-MM-DD HH: MM: SS.SSSSXXX" ne correspond pas au format de la chaîne 2016-06-20T13: 01: 46.457 + 02: 00 < / code>. Par exemple, où est le "T" au format de date?


Je sais mais je ne trouve pas le bon match


Ce document est très utile: i.stack.imgur.com/lkyvy.png


Vous devez mettre votre chaîne en une ligne et le format sous la deuxième ligne, et essayez de «faire correspondre» le format. Par exemple, le "HH" est au format 12H, mais la chaîne semble gérer le format de 24h, donc "HH", etc. Essayez celui-ci: AAAA: MM: MM: SSZ < / code>


@Larme ça ne marche pas, date == nil


Vadian mieux expliqué ci-dessous, cependant, grâce à tout le monde, +1


3 Réponses :


28
votes

Le format standard ISO8601 Date avec fraction secondaire et fuseau horaire est

AAAA-MM-DD'HHHH: MM: SS.SSSZ xxx

Swift 3: xxx

in macos 10.13+, iOS 11+ ISO8601DateFormatter est une alternative comme formateur d'entrée xxx


7 commentaires

Ça marche. Merci d'aide et pour l'explication. +1


NsdateFormatter () est obsolète depuis Swift 3


Cette conversion me donne la date d'UTC, je veux le convertir en ma date locale.


Pour les formats de date fixe, vous devez définir le formulaire de formulaire de date de la date à "EN_US_POSIX"


Si vous travaillez avec des dates de format fixe, définissez d'abord les paramètres régionaux du formateur de date à quelque chose approprié pour votre format fixe. Dans la plupart des cas, les meilleurs paramètres régionaux à choisir sont EN_US_POSIX, une locale spécialement conçue pour donner des résultats en anglais américain Quoiqu'ils préférences de l'utilisateur et du système . EN_US_POSIX est également invariant dans le temps (si les États-Unis, à un moment donné, modifient la manière dont il format les dates, EN_US changera pour refléter le nouveau comportement, mais en_us_posix ne sera pas) et entre les plates-formes (fonctionne la même chose sur iPhone OS Comme sur OS X, et comme il le fait sur d'autres plates-formes)


La reprise peut échouer si l'utilisateur utilise 12h au lieu du format de temps de 24h


C'est une solution parfaite et a travaillé comme un charme.



4
votes

J'utilise toujours ce code lors de la conversion code> String code> sur date code>. ( SWIFT 3 STRAND>)

print ( "2016-06-20T13:01:46.457+02:00".toDate(dateFormat: "yyyy-MM-dd'T'HH:mm:ss.SSSZ") )
//Capital HH for 24-Hour Time 


1 commentaires

Cela reviendra actuellement comme une date au cas où l'analyse de la chaîne de date échoue. Vous devez modifier le type de retour en option et renvoyer nil en cas d'échec.



1
votes

J'utilise toujours ce code lors de la conversion de la chaîne à ce jour. (SWIFT 4.2)

    let myDate = "2019-02-22T08:21:11+0000"
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    let date = myDate
    dateFormatter.dateFormat = "dd/MM/yyyy"
    let dateString = dateFormatter.string(from:date)
    print(dateString)


0 commentaires