Je veux convertir "2014-07-15 06: 55: 14.198000 + 00: 00" cette date de chaîne en NSDate dans Swift.
Je veux convertir "2014-07-15 06: 55: 14.198000 + 00: 00" cette date de chaîne en NSDate dans Swift.
Réponses:
essaye ça:
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
                            */
guard let date = dateFormatter.date(from: /* your_date_string */) else {
   fatalError("ERROR: Date conversion failed due to mismatched format.")
}
// use date constant here
              yyyy-MM-dd hh:mm:ssZZZ. Mais je ne parviens pas à extraire l'objet date de la chaîne.
                    hhqui devrait être HH. Merci!
                    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.
                    Swift 4
import Foundation
let 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
import Foundation
var dateString = "2014-07-15" // change to your date format
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
var date = dateFormatter.dateFromString(dateString)
println(date)
Je peux le faire avec ce code.
ddplace de DDdevrait aider à résoudre le problème "toujours janvier".
                    yyyy-MM-ddsinon, la date analysée est bloquée en janvier - j'ai mis à jour la réponse pour refléter le changement.
                     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") as TimeZone!
    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") as TimeZone!
    let timeStamp = dateFormatter.string(from: date!)
    return timeStamp
}
              import Foundation
extension DateFormatter {
    convenience init (format: String) {
        self.init()
        dateFormat = format
        locale = Locale.current
    }
}
extension String {
    func toDate (dateFormatter: DateFormatter) -> Date? {
        return dateFormatter.date(from: self)
    }
    func toDateString (dateFormatter: DateFormatter, outputFormat: String) -> String? {
        guard let date = toDate(dateFormatter: dateFormatter) else { return nil }
        return DateFormatter(format: outputFormat).string(from: date)
    }
}
extension Date {
    func toString (dateFormatter: DateFormatter) -> String? {
        return dateFormatter.string(from: self)
    }
}
var dateString = "14.01.2017T14:54:00"
let dateFormatter = DateFormatter(format: "dd.MM.yyyy'T'HH:mm:ss")
let date = Date()
print("original String with date:               \(dateString)")
print("date String() to Date():                 \(dateString.toDate(dateFormatter: dateFormatter)!)")
print("date String() to formated date String(): \(dateString.toDateString(dateFormatter: dateFormatter, outputFormat: "dd MMMM")!)")
let dateFormatter2 = DateFormatter(format: "dd MMM HH:mm")
print("format Date():                           \(date.toString(dateFormatter: dateFormatter2)!)")
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:
extension String
{   
    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:
var myDate = myDateString.toDateTime()
              hhdevrait être le HHcas dans ce cas.
                    Pour Swift 3
func stringToDate(_ str: String)->Date{
    let formatter = DateFormatter()
    formatter.dateFormat="yyyy-MM-dd hh:mm:ss Z"
    return formatter.date(from: str)!
}
func dateToString(_ str: Date)->String{
    var dateFormatter = DateFormatter()
    dateFormatter.timeStyle=DateFormatter.Style.short
    return dateFormatter.string(from: str)
}
              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:
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.
(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.
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é.
extension NSDate
{
    convenience
    init(dateString:String) {
        let dateStringFormatter = NSDateFormatter()
        dateStringFormatter.dateFormat = "yyyyMMdd"
        dateStringFormatter.locale = NSLocale(localeIdentifier: "fr_CH_POSIX")
        let d = dateStringFormatter.dateFromString(dateString)!
        self.init(timeInterval:0, sinceDate:d)
    }
} 
Vous pouvez maintenant lancer un objet NSDate en utilisant:
let myDateObject = NSDate(dateString:"2010-12-15 06:00:00")
              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.
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)
              df.date(from: beginDateString), je reçois un zéro! Pourquoi? ( df = DateFormatter())
                    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)
              POUR SWIFT 3.1
func convertDateStringToDate(longDate: String) -> String{
    /* INPUT: longDate = "2017-01-27T05:00:00.000Z"
     * OUTPUT: "1/26/17"
     * date_format_you_want_in_string from
     * http://userguide.icu-project.org/formatparse/datetime
     */
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    let date = dateFormatter.date(from: longDate)
    if date != nil {
        let formatter = DateFormatter()
        formatter.dateStyle = .short
        let dateShort = formatter.string(from: date!)
        return dateShort
    } else {
        return longDate
    }
}
REMARQUE: CECI RETOURNERA LA CHAÎNE ORIGINALE EN CAS D'ERREUR
Ce travail pour moi ..
    import Foundation
    import UIKit
    //dateString = "01/07/2017"
    private func parseDate(_ dateStr: String) -> String {
            let simpleDateFormat = DateFormatter()
            simpleDateFormat.dateFormat = "dd/MM/yyyy" //format our date String
            let dateFormat = DateFormatter()
            dateFormat.dateFormat = "dd 'de' MMMM 'de' yyyy" //format return
            let date = simpleDateFormat.date(from: dateStr)
            return dateFormat.string(from: date!)
    }
              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, yyyy12/27/2018    format = MM/dd/yyyy12-27-2018 09:59  format = MM-dd-yyyy HH:mmDec 27, 9:59 AM   format =  MMM d, h:mm aDecember 2018 format = MMMM yyyyDec 27, 2018  format = MMM d, yyyyThu, 27 Dec 2018 09:59:19 +0000   format =  E, d MMM yyyy HH:mm:ss Z2018-12-27T09:59:19+0000  format =  yyyy-MM-dd'T'HH:mm:ssZ27.12.18  format =  dd.MM.yy09:59:19.815 format =   HH:mm:ss.SSSSwift: iOS
if we have string, convert it to NSDate,
var dataString = profileValue["dob"] as String
var 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
if let isDate = dateValue {
self.datePicker.date = isDate
}
              Vous pouvez essayer ce code rapide
    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)
              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 .
func getDateFrom(dateString: String, dateFormat: String) -> Date? {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = dateFormat
    dateFormatter.locale = Locale(identifier: "en_US")
    guard let date = dateFormatter.date(from: dateString) else {return nil}
    return date
}
              import Foundation
let now : String = "2014-07-16 03:03:34 PDT"
var date : NSDate
var dateFormatter : NSDateFormatter
date = dateFormatter.dateFromString(now)
date // $R6: __NSDate = 2014-07-16 03:03:34 PDT