ios swift nsdate nsdateformatter

ios - Formato de fecha en Swift



nsdate nsdateformatter (15)

Swift - 4.0

2018-02-02 06:50:16 +0000 Convertir 02-02-2018

extension Date { static func getFormattedDate(string: String) -> String{ let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss +zzzz" // This formate is input formated . let formateDate = dateFormatter.date(from:"2018-02-02 06:50:16 +0000")! dateFormatter.dateFormat = "dd-MM-yyyy" // Output Formated print ("Print :/(dateFormatter.string(from: formateDate))")//Print :02-02-2018 return dateFormatter.string(from: formateDate) } }

Swift - 4.0

2018-02-01T19: 10: 04 + 00: 00 Convertir febrero 01,2018

extension Date { static func getFormattedDate(string: String , formatter:String) -> String{ let dateFormatterGet = DateFormatter() dateFormatterGet.dateFormat = "yyyy-MM-dd''T''HH:mm:ssZ" let dateFormatterPrint = DateFormatter() dateFormatterPrint.dateFormat = "MMM dd,yyyy" let date: Date? = dateFormatterGet.date(from: "2018-02-01T19:10:04+00:00") print("Date",dateFormatterPrint.string(from: date!)) // Feb 01,2018 return dateFormatterPrint.string(from: date!); } }

¿Cómo convertiré esta fecha y hora desde la fecha?

De esto: 2016-02-29 12:24:26
a: 29 de febrero de 2016

Hasta ahora, este es mi código y devuelve un valor nulo:

let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "MM-dd-yyyy" dateFormatter.timeZone = NSTimeZone(name: "UTC") let date: NSDate? = dateFormatter.dateFromString("2016-02-29 12:24:26") print(date)


Swift 3 y superior

let dateFormatter = DateFormatter() dateFormatter.dateStyle = .medium dateFormatter.timeStyle = .none dateFormatter.locale = Locale(identifier: "en_US") print(dateFormatter.string(from: date)) // Jan 2, 2001

Esto también es útil cuando desea localizar su aplicación. La configuración regional (identificador :) utiliza el código ISO 639-1 . Ver también la documentación de Apple


Colóquelo en extensión y llámelo como a continuación. Es fácil de usar en toda la aplicación.

self.getFormattedDate(strDate: "20-March-2019", currentFomat: "dd-MMM-yyyy", expectedFromat: "yyyy-MM-dd")

Implementación

func getFormattedDate(strDate: String , currentFomat:String, expectedFromat: String) -> String{ let dateFormatterGet = DateFormatter() dateFormatterGet.dateFormat = currentFomat let date : Date = dateFormatterGet.date(from: strDate)! dateFormatterGet.dateFormat = expectedFromat return dateFormatterGet.string(from: date) }


Esto puede ser útil para quienes desean usar dateformater.dateformat; si quieres 12.09.18 usas dateformater.dateformat = "dd.MM.yy"

Wednesday, Sep 12, 2018 --> EEEE, MMM d, yyyy 09/12/2018 --> MM/dd/yyyy 09-12-2018 14:11 --> MM-dd-yyyy HH:mm Sep 12, 2:11 PM --> MMM d, h:mm a September 2018 --> MMMM yyyy Sep 12, 2018 --> MMM d, yyyy Wed, 12 Sep 2018 14:11:54 +0000 --> E, d MMM yyyy HH:mm:ss Z 2018-09-12T14:11:54+0000 --> yyyy-MM-dd''T''HH:mm:ssZ 12.09.18 --> dd.MM.yy 10:41:02.112 --> HH:mm:ss.SSS


Otra interesante posibilidad de formato de fecha. Esta captura de pantalla pertenece a la aplicación "Noticias" de Apple.

Aquí está el código:

let dateFormat1 = DateFormatter() dateFormat1.dateFormat = "EEEE" let stringDay = dateFormat1.string(from: Date()) let dateFormat2 = DateFormatter() dateFormat2.dateFormat = "MMMM" let stringMonth = dateFormat2.string(from: Date()) let dateFormat3 = DateFormatter() dateFormat3.dateFormat = "dd" let numDay = dateFormat3.string(from: Date()) let stringDate = String(format: "%@/n%@ %@", stringDay.uppercased(), stringMonth.uppercased(), numDay)

Nada que agregar a la alternativa propuesta por lorenzoliveto. Es perfecto

let dateFormat = DateFormatter() dateFormat.dateFormat = "EEEE/nMMMM dd" let stringDate = dateFormat.string(from: Date()).uppercased()


Para convertir 2016-02-29 12:24:26 en una fecha, use este formateador de fecha:

let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"

Editar: Para obtener la salida el 29 de febrero de 2016, use este formateador de fecha:

let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "MMM dd, yyyy"


Si desea analizar la fecha de "1996-12-19T16: 39: 57-08: 00", use el siguiente formato "aaaa-MM-dd''T''HH: mm: ssZZZZZ":

let RFC3339DateFormatter = DateFormatter() RFC3339DateFormatter.locale = Locale(identifier: "en_US_POSIX") RFC3339DateFormatter.dateFormat = "yyyy-MM-dd''T''HH:mm:ssZZZZZ" RFC3339DateFormatter.timeZone = TimeZone(secondsFromGMT: 0) /* 39 minutes and 57 seconds after the 16th hour of December 19th, 1996 with an offset of -08:00 from UTC (Pacific Standard Time) */ let string = "1996-12-19T16:39:57-08:00" let date = RFC3339DateFormatter.date(from: string)

de Apple https://developer.apple.com/documentation/foundation/dateformatter


Swift 3 con una extensión de Date

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

Entonces puedes usarlo así:

let date = Date() date.string(with: "MMM dd, yyyy")


Versión Swift 3 con el nuevo objeto Date lugar de NSDate :

let dateFormatterGet = DateFormatter() dateFormatterGet.dateFormat = "yyyy-MM-dd HH:mm:ss" let dateFormatter = DateFormatter() dateFormatter.dateFormat = "MMM dd,yyyy" let date: Date? = dateFormatterGet.date(from: "2017-02-14 17:24:26") print(dateFormatter.string(from: date!))

EDITAR: después mitul-nakum sugerencia de mitul-nakum


rápido 3

func dataFormat(dataJ: Double) -> String { let dateFormatter = DateFormatter() dateFormatter.dateStyle = .long dateFormatter.timeStyle = .none let date = Date(timeIntervalSince1970: dataJ) return (dataJ != nil) ? "Today, /(dateFormatter.string(from: date))" : "Date Invalid" }


solo use la siguiente función para convertir el formato de fecha: -

let convertedFormat = convertToString(dateString: "2019-02-12 11:23:12", formatIn: "yyyy-MM-dd hh:mm:ss", formatOut: "MMM dd, yyyy") //calling function print(convertedFormat) // feb 12 2019 func convertToString (dateString: String, formatIn : String, formatOut : String) -> String { let dateFormater = DateFormatter() dateFormater.timeZone = NSTimeZone(abbreviation: "UTC") as TimeZone! dateFormater.dateFormat = formatIn let date = dateFormater.date(from: dateString) dateFormater.timeZone = NSTimeZone.system dateFormater.dateFormat = formatOut let timeStr = dateFormater.string(from: date!) return timeStr }


NSDateFormatters declarar 2 NSDateFormatters diferentes, el primero para convertir la cadena en un NSDate y el segundo para imprimir la fecha en su formato.
Prueba este código:

let dateFormatterGet = NSDateFormatter() dateFormatterGet.dateFormat = "yyyy-MM-dd HH:mm:ss" let dateFormatterPrint = NSDateFormatter() dateFormatterPrint.dateFormat = "MMM dd,yyyy" let date: NSDate? = dateFormatterGet.dateFromString("2016-02-29 12:24:26") print(dateFormatterPrint.stringFromDate(date!))

Swift 3 y superior:

De Swift 3, la clase NSDate se ha cambiado a Date y NSDateFormatter a DateFormatter .

let dateFormatterGet = DateFormatter() dateFormatterGet.dateFormat = "yyyy-MM-dd HH:mm:ss" let dateFormatterPrint = DateFormatter() dateFormatterPrint.dateFormat = "MMM dd,yyyy" if let date = dateFormatterGet.date(from: "2016-02-29 12:24:26") { print(dateFormatterPrint.string(from: date)) } else { print("There was an error decoding the string") }


yyyy-MM-dd''T''HH:mm:ss.SSS''Z'' mi problema al formato yyyy-MM-dd''T''HH:mm:ss.SSS''Z'' (por ejemplo, 2018-06-15T00: 00: 00.000Z) con esto:

func formatDate(date: String) -> String { let dateFormatterGet = DateFormatter() dateFormatterGet.dateFormat = "yyyy-MM-dd''T''HH:mm:ss.SSS''Z''" let dateFormatter = DateFormatter() dateFormatter.dateStyle = .medium dateFormatter.timeStyle = .none // dateFormatter.locale = Locale(identifier: "en_US") //uncomment if you don''t want to get the system default format. let dateObj: Date? = dateFormatterGet.date(from: date) return dateFormatter.string(from: dateObj!) }


Swift 4, 4.2 y 5

func getFormattedDate(date: Date, format: String) -> String { let dateformat = DateFormatter() dateformat.dateFormat = format return dateformat.string(from: date) } let formatingDate = getFormattedDate(date: Date(), format: "dd-MMM-yyyy") print(formatingDate)


rápido 3

let date : Date = Date() let dateFormatter = DateFormatter() dateFormatter.dateFormat = "MMM dd, yyyy" let todaysDate = dateFormatter.string(from: date)