Converter NSDate para String no iOS Swift



swift3 nsdateformatter (5)

Esta questão já tem uma resposta aqui:

Eu estou tentando converter um NSDate para uma String e, em seguida, alterar o formato. Mas quando eu passar NSDate para String , está produzindo espaço em branco.

 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)

Algo a ter em mente ao criar formatadores é tentar reutilizar a mesma instância, se possível, pois os formatadores são computacionalmente caros para serem criados. A seguir, um padrão que eu uso com frequência para aplicativos em que posso compartilhar o mesmo formatador em todo o aplicativo, adaptado do 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
    }()
}

Uso:

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

Depois de alocar DateFormatter você precisa dar a string formatada, então você pode converter como string como desta forma

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)

Saída

01-mar-2017


Seu código atualizado. Atualize-o.

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!)

Você pode usar esta extensão:

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!)
    }
}

E use-o no seu controlador de visualização como este (substitua <"yyyy"> pelo seu formato):

yourString = yourDate.toString(withFormat: "yyyy")

DateFormatter tem alguns estilos de data de fábrica para aqueles com muita preguiça de mexer com as seqüências de formatação. Se você não precisa de um estilo personalizado, eis outra opção:

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

Isso lhe dá os seguintes estilos:

short, medium, long, full

Exemplo de uso:

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




nsdateformatter