web-dev-qa-db-fra.com

Convertir NSDate en chaîne sous iOS Swift

J'essaie de convertir un NSDate en un String, puis de changer de format. Mais lorsque je passe NSDate à String, il produit des espaces.

 let formatter = DateFormatter()
 let myString = (String(describing: date))
 formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
 let yourDate: Date? = formatter.date(from: myString)
 formatter.dateFormat = "dd-MMM-yyyy"
 print(yourDate)
55
iOS

vous obtenez les informations détaillées de Apple Dateformatter Document . Si vous souhaitez définir le formatdate pour votre dateString, consultez ceci lien , le formatDateformat que vous pouvez obtenir ici par exemple, faire comme

let formatter = DateFormatter()
// initially set the format based on your datepicker date / server String
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

let myString = formatter.string(from: Date()) // string purpose I add here 
// convert your string to date
let yourDate = formatter.date(from: myString)
//then again set the date format whhich type of output you need
formatter.dateFormat = "dd-MMM-yyyy"
// again convert your date to string
let myStringafd = formatter.string(from: yourDate!)

print(myStringafd)

vous obtenez la sortie comme

enter image description here

129
Anbu.Karthik

J'utilise toujours ce code lors de la conversion de Date en String. (Swift 3)

extension Date
{
    func toString( dateFormat format  : String ) -> String
    {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = format
        return dateFormatter.string(from: self)
    }

}

et appelle comme ça. .

let today = Date()
today.toString(dateFormat: "dd-MM")
58
roy

DateFormatter a certains styles de date d'usine pour ceux qui sont trop paresseux pour bricoler les chaînes de formatage. Si vous n'avez pas besoin d'un style personnalisé, voici une autre option:

extension Date {  
  func asString(style: DateFormatter.Style) -> String {
    let dateFormatter = DateFormatter()
    dateFormatter.dateStyle = style
    return dateFormatter.string(from: self)
  }
}

Cela vous donne les styles suivants:

short, medium, long, full

Exemple d'utilisation:

let myDate = Date()
myDate.asString(style: .full)   // Wednesday, January 10, 2018
myDate.asString(style: .long)   // January 10, 2018
myDate.asString(style: .medium) // Jan 10, 2018
myDate.asString(style: .short)  // 1/10/18
12
Adrian

Votre code mis à jour. Le mettre à jour.

let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let myString = formatter.string(from: date as Date)
let yourDate: Date? = formatter.date(from: myString)
formatter.dateFormat = "dd-MMM-yyyy"
print(yourDate!)
6
Brijesh Shiroya

Lorsque vous créez des formateurs, gardez à l’esprit que vous devez essayer de réutiliser la même instance si vous le pouvez, car les formateurs sont assez coûteux à créer. Ce qui suit est un modèle que j'utilise fréquemment pour les applications où je peux partager le même outil de formatage, adapté de NSHipster .

extension DateFormatter {

    static var sharedDateFormatter: DateFormatter = {
        let dateFormatter = DateFormatter()   
        // Add your formatter configuration here     
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        return dateFormatter
    }()
}

Usage:

let dateString = DateFormatter.sharedDateFormatter.string(from: Date())
3
Kevin Stewart

Vous pouvez utiliser cette extension:

extension Date {

    func toString(withFormat format: String) -> String {
        let formatter = DateFormatter()
        formatter.dateFormat = format
        let myString = formatter.string(from: self)
        let yourDate = formatter.date(from: myString)
        formatter.dateFormat = format

        return formatter.string(from: yourDate!)
    }
}

Et utilisez-le dans votre contrôleur de vue comme ceci (remplacez <"aaaa"> par votre format):

yourString = yourDate.toString(withFormat: "yyyy")
1
Archi Stepanov

Après avoir alloué DateFormatter vous devez donner la chaîne formatée pour pouvoir la convertir en chaîne de cette façon

var date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let myString = formatter.string(from: date)
let yourDate: Date? = formatter.date(from: myString)
formatter.dateFormat = "dd-MMM-yyyy"
let updatedString = formatter.string(from: yourDate!)
print(updatedString)

Sortie

1-mars-2017

1