En tant que ressource complémentaire à toutes les réponses ci-dessous, je recommande fortement de consulter nsdateformatter.com
user3344977
Les anciennes réponses ici sont vraiment fausses . Le doco d'Apple dit clairement que vous devez mettre en cache le formateur. stackoverflow.com/a/42370648/294884
let dateFormatter =NSDateFormatter()
dateFormatter.dateFormat =/* find out and place date format from
* http://userguide.icu-project.org/formatparse/datetime
*/let date = dateFormatter.dateFromString(/* your_date_string */)
Pour plus d'informations, consultez les classes NSDateFormatter et DateFormatter du framework Foundation pour Objective-C et Swift, respectivement.
Swift 3 et versions ultérieures (Swift 4 inclus)
let dateFormatter =DateFormatter()
dateFormatter.dateFormat =/* date_format_you_want_in_string from
* http://userguide.icu-project.org/formatparse/datetime
*/guardlet date = dateFormatter.date(from:/* your_date_string */)else{
fatalError("ERROR: Date conversion failed due to mismatched format.")}// use date constant here
Trouvé la solution juste besoin de définir "aaaa-MM-jj hh: mm: ss.SSSSxxx" ce format de date
Shardul
1
J'ai une chaîne de date comme celle-ci "2014-07-15 06: 55: 14-0400" et j'ai essayé d'utiliser yyyy-MM-dd hh:mm:ssZZZ. Mais je ne parviens pas à extraire l'objet date de la chaîne.
iamprem
2
@Prem, si vous voyez que la sortie est "2014-07-15 10:55:14 +0000"correcte. À partir de la NSDatedescription, la sortie de la date serait calculée avec différence (ici, GMT -4 heures). Si vous voulez obtenir la différence entre GMT et UTC, -0400vérifiez cette référence
x4h1d
@ x4h1d, hé je l'ai! J'ai fait une erreur hhqui devrait être HH. Merci!
iamprem
3
@ lmiguelvargasf, je pense que ce serait yyyy-MM-dd'T'HH:mm:ss.SSS'Z'. Je suppose que Zc'est juste un personnage ici. N'oubliez pas, Za également une signification particulière. Si vous souhaitez Zspécifier basic hmsque le format serait yyyy-MM-dd'T'HH:mm:ss.SSSZ.
x4h1d
71
Swift 4
importFoundationlet dateString ="2014-07-15"// change to your date format
var dateFormatter =DateFormatter()
dateFormatter.dateFormat ="yyyy-MM-dd"let date = dateFormatter.date(from: dateString)
println(date)
Swift 3
importFoundationvar dateString ="2014-07-15"// change to your date format
var dateFormatter =NSDateFormatter()
dateFormatter.dateFormat ="yyyy-MM-dd"var date = dateFormatter.dateFromString(dateString)
println(date)
Le code n'est pas correct. Il affiche certains "15 janvier 2014, 00h00"
Jake Lin
5
utiliser à la ddplace de DDdevrait aider à résoudre le problème "toujours janvier".
Pascal Belloncle
1
La version correcte est, yyyy-MM-ddsinon, la date analysée est bloquée en janvier - j'ai mis à jour la réponse pour refléter le changement.
Zorayr
Et si je veux passer la date actuelle sous forme de chaîne. Est-ce que ça va marcher?
Arjun Kalidas
@Zorayr, Kittisak: Je reçois le message, facultatif (2014-07-14 18:30:00 +0000) cela signifie qu'un jour est décrémenté. Comment puis-je réparer cela ?
Vineesh TP
54
func convertDateFormatter(date:String)->String{let dateFormatter =NSDateFormatter()
dateFormatter.dateFormat ="yyyy-MM-dd'T'HH:mm:ss.SSSZ"//this your string date format
dateFormatter.timeZone =NSTimeZone(name:"UTC")let date = dateFormatter.dateFromString(date)
dateFormatter.dateFormat ="yyyy MMM EEEE HH:mm"///this is what you want to convert format
dateFormatter.timeZone =NSTimeZone(name:"UTC")let timeStamp = dateFormatter.stringFromDate(date!)return timeStamp
}
Mis à jour pour Swift 3.
func convertDateFormatter(date:String)->String{let dateFormatter =DateFormatter()
dateFormatter.dateFormat ="yyyy-MM-dd'T'HH:mm:ss.SSSZ"//this your string date format
dateFormatter.timeZone =NSTimeZone(name:"UTC")asTimeZone!let date = dateFormatter.date(from: date)
dateFormatter.dateFormat ="yyyy MMM EEEE HH:mm"///this is what you want to convert format
dateFormatter.timeZone =NSTimeZone(name:"UTC")asTimeZone!let timeStamp = dateFormatter.string(from: date!)return timeStamp
}
Si vous devez souvent analyser la chaîne dans une date, vous souhaiterez peut-être déplacer la fonctionnalité dans une extension. J'ai créé un fichier sharedCode.swift et y ai placé mes extensions:
extensionString{func toDateTime()->NSDate{//Create Date Formatter
let dateFormatter =NSDateFormatter()//Specify Format of String to Parse
dateFormatter.dateFormat ="yyyy-MM-dd hh:mm:ss.SSSSxxx"//Parse into NSDate
let dateFromString :NSDate= dateFormatter.dateFromString(self)!//Return Parsed Date
return dateFromString
}}
Ensuite, si vous souhaitez convertir votre chaîne en NSDate, vous pouvez simplement écrire quelque chose comme:
Merci. Il est également possible, bien que moins utile, d'écrire: var myDate = "04-05-2015" .toDateTime () J'ai trouvé cela pratique lors de la configuration des données de test.
Stephen Watson
1
Je suis sûr que cela hhdevrait être le HHcas dans ce cas.
Alex
Cela ne me donne pas dans le format que je spécifie: var date = NSDate (); laissez dateFormatter = NSDateFormatter (); dateFormatter.dateFormat = "MMMM j, AAAA"; laissez myDate = dateFormatter.stringFromDate (date); Et en plus de cela si j'utilise votre extension comme ça -> var myDate2 = myDate.toDateTime (); Cela me donne une date complètement différente et non la date actuelle.
Formater le cache pour plus d'efficacité
La création d'un formateur de date n'est pas une opération bon marché. ... cache une seule instance ...
Utilisez un global ...
let df :DateFormatter={let formatter =DateFormatter()
formatter.dateFormat ="yyyy-MM-dd"return formatter
}()
Ensuite, utilisez simplement ce formateur n'importe où ...
let s = df.string(from: someDate)
ou
let d = df.date(from: someString)
Ou utilisez l'une des nombreuses autres méthodes pratiques de DateFormatter.
C'est aussi simple que cela.
(Si vous écrivez une extension sur String, votre code est complètement "à l'envers" - vous ne pouvez pas utiliser d'appels dateFormatter!)
Notez que vous aurez généralement quelques-uns de ces globaux .. tels que "formatForClient" "formatForPubNub" "formatForDisplayOnInvoiceScreen" .. etc.
Pas besoin de les laisser à l'échelle mondiale. Vous pouvez étendre Formatter simplement déclarer vos propriétés statiques. consultez ce stackoverflow.com/a/43658213/2303865
Leo Dabus
4
Extensions de soutien rapide, avec l' extension , vous pouvez ajouter une nouvelle fonctionnalité à un existant class, structure, enumerationou le protocoltype.
Vous pouvez ajouter une nouvelle initfonction à l' NSDateobjet en étendant l'objet à l'aide du extensionmot - clé.
J'aime la manière init. N'y a-t-il pas une autre façon de créer la date sans utiliser timeInterval? que se passe-t-il si nsdate cesse d'avoir un initialiseur avec un paramètre de date? comment le résoudriez-vous? Personnellement, je préfère une méthode d'initiation mais je ne sais pas comment surmonter ce problème
Mijail
J'ai un problème: ma date sous forme de chaîne est la suivante: "2017-03-10 22:16:00 +0000" et j'ai utilisé ce format: "aaaa-MM-jj hh: mm: ss Z" et celui-ci: "aaaa-MM-jj'T'HH: mm: ss". Mais pour les deux, quand je fais cela: laissez beginDate = df.date(from: beginDateString), je reçois un zéro! Pourquoi? ( df = DateFormatter())
Paul Bénéteau
4
Depuis Swift 3, de nombreux préfixes NS ont été supprimés.
let dateFormatter =DateFormatter()
dateFormatter.dateFormat ="yyyy-MM-dd'T'HH:mm:ss.SSSZ"/* date format string rules
* http://userguide.icu-project.org/formatparse/datetime
*/let date = dateFormatter.date(from: dateString)
J'ai un problème: ma date sous forme de chaîne est la suivante: "2017-03-10 22:16:00 +0000" et j'ai utilisé ce format: "aaaa-MM-jj hh: mm: ss Z" et celui-ci: "aaaa-MM-jj'T'HH: mm: ss". Mais pour les deux, quand je fais cela: laissez beginDate = df.date(from: beginDateString), je reçois un zéro! Pourquoi? ( df = DateFormatter())
Paul Bénéteau
4
Swift 3,4:
2 conversions utiles:
string(from:Date)// to convert from Date to a String
date(from:String)// to convert from String to Date
Utilisation: 1.
let date =Date()//gives today's date
let dateFormatter =DateFormatter()
dateFormatter.dateFormat ="dd.MM.yyyy"let todaysDateInUKFormat = dateFormatter.string(from: date)
2.
let someDateInString ="23.06.2017"var getDateFromString = dateFormatter.date(from: someDateInString)
Swift:iOSif we have string, convert it to NSDate,var dataString = profileValue["dob"]asStringvar dateFormatter =NSDateFormatter()
dateFormatter.dateFormat ="MM-dd-yyyy"// convert string into date
let dateValue:NSDate?= dateFormatter.dateFromString(dataString)if you have and date picker parse date like this
// to avoid any nil value
iflet isDate = dateValue {self.datePicker.date = isDate
}
let dateFormatter =DateFormatter()
dateFormatter.dateFormat ="dd/MM/yyyy"//same as strDate date formator
dateFormatter.timeZone =TimeZone(abbreviation:"GMT+0:00")//Must used if you get one day less in conversion
let convertedDateObject = dateFormatter.date(from: strDate)
Passez votre (date dans la chaîne) au format "dateString" et au format "dateFormat" que vous souhaitez. Pour choisir le format, utilisez le site Web NDateFormatter .
func getDateFrom(dateString:String, dateFormat:String)->Date?{let dateFormatter =DateFormatter()
dateFormatter.dateFormat = dateFormat
dateFormatter.locale =Locale(identifier:"en_US")guardlet date = dateFormatter.date(from: dateString)else{returnnil}return date
}
importFoundationlet now :String="2014-07-16 03:03:34 PDT"var date :NSDatevar dateFormatter :NSDateFormatter
date = dateFormatter.dateFromString(now)
date // $R6:__NSDate =2014-07-1603:03:34 PDT
Comment est-ce censé fonctionner? Le formateur de date n'est pas initialisé et il n'y a également aucune raison de diviser la déclaration et l'initialisation de la date.
Réponses:
essaye ça:
Pour plus d'informations, consultez les classes NSDateFormatter et DateFormatter du framework Foundation pour Objective-C et Swift, respectivement.
Swift 3 et versions ultérieures (Swift 4 inclus)
la source
yyyy-MM-dd hh:mm:ssZZZ
. Mais je ne parviens pas à extraire l'objet date de la chaîne."2014-07-15 10:55:14 +0000"
correcte. À partir de laNSDate
description, la sortie de la date serait calculée avec différence (ici, GMT -4 heures). Si vous voulez obtenir la différence entre GMT et UTC,-0400
vérifiez cette référencehh
qui devrait êtreHH
. Merci!yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
. Je suppose queZ
c'est juste un personnage ici. N'oubliez pas,Z
a également une signification particulière. Si vous souhaitezZ
spécifierbasic hms
que le format seraityyyy-MM-dd'T'HH:mm:ss.SSSZ
.Swift 4
Swift 3
Je peux le faire avec ce code.
la source
dd
place deDD
devrait aider à résoudre le problème "toujours janvier".yyyy-MM-dd
sinon, la date analysée est bloquée en janvier - j'ai mis à jour la réponse pour refléter le changement.Mis à jour pour Swift 3.
la source
Détails
Solution
Usage
Résultat
Plus d'information
À propos du format de date
la source
Si vous devez souvent analyser la chaîne dans une date, vous souhaiterez peut-être déplacer la fonctionnalité dans une extension. J'ai créé un fichier sharedCode.swift et y ai placé mes extensions:
Ensuite, si vous souhaitez convertir votre chaîne en NSDate, vous pouvez simplement écrire quelque chose comme:
la source
hh
devrait être leHH
cas dans ce cas.Pour Swift 3
la source
Les fragments de code sur cette page QA sont "à l'envers" ...
La première chose qu'Apple mentionne, c'est que vous mettez en cache votre formateur ...
Lien vers le doco Apple indiquant exactement comment procéder:
Utilisez un global ...
Ensuite, utilisez simplement ce formateur n'importe où ...
ou
Ou utilisez l'une des nombreuses autres méthodes pratiques de DateFormatter.
C'est aussi simple que cela.
(Si vous écrivez une extension sur String, votre code est complètement "à l'envers" - vous ne pouvez pas utiliser d'appels dateFormatter!)
Notez que vous aurez généralement quelques-uns de ces globaux .. tels que "formatForClient" "formatForPubNub" "formatForDisplayOnInvoiceScreen" .. etc.
la source
Extensions de soutien rapide, avec l' extension , vous pouvez ajouter une nouvelle fonctionnalité à un existant
class
,structure
,enumeration
ou leprotocol
type.Vous pouvez ajouter une nouvelle
init
fonction à l'NSDate
objet en étendant l'objet à l'aide duextension
mot - clé.Vous pouvez maintenant lancer un objet NSDate en utilisant:
la source
df.date(from: beginDateString)
, je reçois un zéro! Pourquoi? (df = DateFormatter()
)Depuis Swift 3, de nombreux préfixes NS ont été supprimés.
la source
df.date(from: beginDateString)
, je reçois un zéro! Pourquoi? (df = DateFormatter()
)Swift 3,4:
2 conversions utiles:
Utilisation: 1.
2.
la source
POUR SWIFT 3.1
REMARQUE: CECI RETOURNERA LA CHAÎNE ORIGINALE EN CAS D'ERREUR
la source
Pour ajouter une chaîne dans le format de date dans Swift, je l'ai fait
la source
Ce travail pour moi ..
la source
Vous trouverez ci-dessous quelques options de conversion de format de chaîne en date pouvant être utilisées dans iOS rapide.
Thursday, Dec 27, 2018
format =EEEE, MMM d, yyyy
12/27/2018
format =MM/dd/yyyy
12-27-2018 09:59
format =MM-dd-yyyy HH:mm
Dec 27, 9:59 AM
format =MMM d, h:mm a
December 2018
format =MMMM yyyy
Dec 27, 2018
format =MMM d, yyyy
Thu, 27 Dec 2018 09:59:19 +0000
format =E, d MMM yyyy HH:mm:ss Z
2018-12-27T09:59:19+0000
format =yyyy-MM-dd'T'HH:mm:ssZ
27.12.18
format =dd.MM.yy
09:59:19.815
format =HH:mm:ss.SSS
la source
la source
Vous pouvez essayer ce code rapide
la source
SWIFT 5 , Xcode 11.0
Passez votre (date dans la chaîne) au format "dateString" et au format "dateFormat" que vous souhaitez. Pour choisir le format, utilisez le site Web NDateFormatter .
la source
https://developer.apple.com/library/prerelease/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/index.html#//apple_ref/doc/uid/20000447-SW32
la source