zzz eeee eee xcode swift nsdate nsdateformatter

xcode - eeee - eee date format



Convertir cadena a fecha en Swift (8)

En Swift 4.1 puedes hacer:

func getDate() -> Date? { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd''T''HH:mm:ss" dateFormatter.timeZone = TimeZone.current dateFormatter.locale = Locale.current return dateFormatter.date(from: "2015-04-01T11:42:00") // replace Date String }

¿Cómo puedo convertir esta cadena "2016-04-14T10:44:00+0000" en un NSDate y mantener solo el año, mes, día, hora?

La T en el medio realmente arroja lo que estoy acostumbrado cuando trabajo con fechas.


En swift4,

var Msg_Date_ = "2019-03-30T05:30:00+0000" let dateFormatterGet = DateFormatter() dateFormatterGet.dateFormat = "yyyy-MM-dd''T''HH:mm:ss" let dateFormatterPrint = DateFormatter() dateFormatterPrint.dateFormat = "MMM dd yyyy h:mm a" //"MMM d, h:mm a" for Sep 12, 2:11 PM let datee = dateFormatterGet.date(from: Msg_Date_) Msg_Date_ = dateFormatterPrint.string(from: datee ?? Date()) print(Msg_Date_)

// salida: - mar 30 2019 05:30 PM


Hola, tiene un formato T separado y luego convierte como desee

// create dateFormatter with UTC time format let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd''T''HH:mm:ss" dateFormatter.timeZone = NSTimeZone(name: "UTC") let date = dateFormatter.dateFromString("2015-04-01T11:42:00") // change to a readable time format and change to local time zone dateFormatter.dateFormat = "EEE, MMM d, yyyy - h:mm a" dateFormatter.timeZone = NSTimeZone.localTimeZone() let timeStamp = dateFormatter.stringFromDate(date!)


Pruebe el siguiente formato de fecha.

let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy''-''MM''-''dd''T''HH'':''mm'':''ssZZZ" let date = dateFormatter. dateFromString (strDate)

Espero eso ayude..

Swift 4.1:

let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy''-''MM''-''dd''T''HH'':''mm'':''ssZZZ" let date = dateFormatter.date(from: strDate)


Simplemente pasando su dateformate fecha y su fecha, obtendrá Year,month,day,hour . Información extra

func GetOnlyDateMonthYearFromFullDate(currentDateFormate:NSString , conVertFormate:NSString , convertDate:NSString ) -> NSString { let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = currentDateFormate as String let formatter = NSDateFormatter() formatter.dateFormat = Key_DATE_FORMATE as String let finalDate = formatter.dateFromString(convertDate as String) formatter.dateFormat = conVertFormate as String let dateString = formatter.stringFromDate(finalDate!) return dateString }


Obtener año

let Year = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd''T''HH:mm:ssZ", conVertFormate: "YYYY", convertDate: "2016-04-14T10:44:00+0000") as String


Obtener mes

let month = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd''T''HH:mm:ssZ", conVertFormate: "MM", convertDate: "2016-04-14T10:44:00+0000") as String


Obtener el día

let day = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd''T''HH:mm:ssZ", conVertFormate: "dd", convertDate: "2016-04-14T10:44:00+0000") as String


Obtener hora

let hour = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd''T''HH:mm:ssZ", conVertFormate: "hh", convertDate: "2016-04-14T10:44:00+0000") as String


Swift 3.0 - 4.2

import Foundation extension String { func toDate(withFormat format: String = "yyyy-MM-dd HH:mm:ss")-> Date?{ let dateFormatter = DateFormatter() dateFormatter.timeZone = TimeZone(identifier: "Asia/Tehran") dateFormatter.locale = Locale(identifier: "fa-IR") dateFormatter.calendar = Calendar(identifier: .gregorian) dateFormatter.dateFormat = format let date = dateFormatter.date(from: self) return date } } extension Date { func toString(withFormat format: String = "EEEE ، d MMMM yyyy") -> String { let dateFormatter = DateFormatter() dateFormatter.locale = Locale(identifier: "fa-IR") dateFormatter.timeZone = TimeZone(identifier: "Asia/Tehran") dateFormatter.calendar = Calendar(identifier: .persian) dateFormatter.dateFormat = format let str = dateFormatter.string(from: self) return str } }


Utilice una biblioteca de análisis ISO8601 para hacer esto. Hay demasiadas formas de codificar la cadena. No confíe en un formato específico y no confíe en que el servidor envíe siempre lo mismo. Los problemas comienzan con la ''Z'' al final y se extenderá a todas las variedades del estándar. Una biblioteca de análisis manejará todos los casos y siempre proporcionará una conversión segura, mientras que es probable que una cadena de formato fija falle en el futuro.

Podrías usar una de estas bibliotecas. También están disponibles en CococaPods:

https://github.com/boredzo/iso-8601-date-formatter/

https://github.com/malcommac/SwiftDate

Echa un vistazo a las implementaciones. Ambos tienen varios cientos de líneas de largo, por una buena razón.

Con respecto a la pregunta: puede extraer los componentes de la fecha de la fecha utilizando NSDateComponents. El ejemplo en el sitio web cubre exactamente su caso.

https://developer.apple.com/documentation/foundation/nscalendar/1414841-components?language=objc

Tenga en cuenta que la conversión de su fecha tendrá en cuenta la zona horaria. Es posible que desee establecer la ''configuración regional'' de NSCalendar explícitamente.


  • Convierta la picadura ISO8601 a la fecha

    let isoDate = "2016-04-14T10:44:00+0000" let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd''T''HH:mm:ssZ" dateFormatter.locale = Locale(identifier: "en_US_POSIX") // set locale to reliable US_POSIX let date = dateFormatter.date(from:isoDate)!

  • Obtenga los componentes de fecha para año, mes, día y hora a partir de la fecha

    let calendar = Calendar.current let components = calendar.dateComponents([.year, .month, .day, .hour], from: date)

  • Finalmente, cree un nuevo objeto Date y elimine minutos y segundos

    let finalDate = calendar.date(from:components)

Considere también el conveniente formateador ISO8601DateFormatter introducido en iOS 10 / macOS 12:

let isoDate = "2016-04-14T10:44:00+0000" let dateFormatter = ISO8601DateFormatter() let date = dateFormatter.date(from:isoDate)!