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
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
let now : String = "2014-07-16 03:03:34 PDT"
var date : NSDate
var dateFormatter : NSDateFormatter
date = dateFormatter.dateFromString(now)
date // $R6: __NSDate = 2014-07-16 03:03:34 PDT
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.