convert ios string swift nsdate

ios - convert - string to date swift 4



¿Cómo puedo convertir la fecha de cadena en NSDate? (15)

Quiero convertir "2014-07-15 06: 55: 14.198000 + 00: 00" esta fecha de cadena a NSDate en Swift.


Los fragmentos de código en esta página de control de calidad son "al revés" ...

Lo primero que Apple menciona es que almacenas en caché tu formateador ...

Enlace a Apple doco indicando exactamente cómo hacer esto:

Formateadores de caché para la eficiencia Crear un formateador de fecha no es una operación barata. ... guardar en caché una sola instancia ...

Use un global ...

let df : DateFormatter = { let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd" return formatter }()

Entonces simplemente usa ese formateador en cualquier lugar ...

let s = df.string(from: someDate)

o

let d = df.date(from: someString)

O use cualquiera de los muchos métodos más convenientes en DateFormatter.

Es así de simple.

(Si escribe una extensión en String, su código está completamente "al revés" - ¡no puede usar ninguna llamada de fechaFormatter!)

Tenga en cuenta que, por lo general, tendrá algunas de esas variables globales, como "formatForClient", "formatForPubNub", "formatForDisplayOnInvoiceScreen", etc.


Detalles

Swift 4, xCode 9.2 / Swift 3, xCode 8.2.1

Extensiones de formato de fecha

import Foundation extension DateFormatter { convenience init (format: String) { self.init() dateFormat = format locale = Locale.current } } extension String { func toDate (format: String) -> Date? { return DateFormatter(format: format).date(from: self) } func toDateString (inputFormat: String, outputFormat:String) -> String? { if let date = toDate(format: inputFormat) { return DateFormatter(format: outputFormat).string(from: date) } return nil } } extension Date { func toString (format:String) -> String? { return DateFormatter(format: format).string(from: self) } }

Uso

var dateString = "14.01.2017T14:54:00" let format = "dd.MM.yyyy''T''HH:mm:ss" let date = Date() print("original String with date: /(dateString)") print("date String() to Date(): /(dateString.toDate(format: format)!)") print("date String() to formated date String(): /(dateString.toDateString(inputFormat: format, outputFormat: "dd MMMM")!)") print("format Date(): /(date.toString(format: "dd MMM HH:mm")!)")

Resultado

Más información

Acerca del formato de fecha


Desde Swift 3, muchos de los prefijos NS se han descartado.

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)


Este trabajo para mí ...

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


Extensiones de soporte Swift, con extensión puede agregar una nueva funcionalidad a una class , structure , enumeration o tipo de protocol .

Puede agregar una nueva función init al objeto NSDate al extender el objeto usando la palabra clave de extension .

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

Ahora puede iniciar un objeto NSDate usando:

let myDateObject = NSDate(dateString:"2010-12-15 06:00:00")


PARA 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 } }

NOTA: ESTO VOLVERÁ LA CADENA ORIGINAL SI ERROR


Para agregar cadenas dentro del formato de fecha en Swift, hice esto

var dataFormatter:NSDateFormatter = NSDateFormatter() dataFormatter.dateFormat = "dd-MMMM ''at'' HH:mm a" cell.timeStamplbl.text = dataFormatter.stringFromDate(object.createdAt)


Si va a necesitar analizar la cadena en una fecha a menudo, es posible que desee mover la funcionalidad a una extensión. Creé un archivo sharedCode.swift y puse mis extensiones allí:

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

Entonces, si quieres convertir tu cadena en un NSDate, puedes escribir algo como:

var myDate = myDateString.toDateTime()


Swift 3,4:

2 conversiones útiles:

string(from: Date) // to convert from Date to a String date(from: String) // to convert from String to Date

Uso: 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)


prueba esto:

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 */)

para mayor consulta ver la documentation .

Swift 3 y posterior (Swift 4 incluido)

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


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


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 }

Actualizado para 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 }


Swift: 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 }



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)

Puedo hacerlo con este código.