Quiero convertir "2014-07-15 06: 55: 14.198000 + 00: 00" esta fecha de cadena a NSDate en Swift.
Quiero convertir "2014-07-15 06: 55: 14.198000 + 00: 00" esta fecha de cadena a NSDate en Swift.
Respuestas:
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 consultas adicionales, verifique las clases NSDateFormatter y DateFormatter de Foundation Framework para Objective-C y Swift, respectivamente.
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
yyyy-MM-dd hh:mm:ssZZZ
. Pero no puedo sacar el objeto de fecha de la cadena.
"2014-07-15 10:55:14 +0000"
correcta. A partir de la NSDate
descripción, el resultado de la fecha se calcularía con diferencia (aquí, GMT -4 horas). Si desea obtener la diferencia entre GMT y UTC, -0400
consulte esta referencia
hh
que debería estar HH
. ¡Gracias!
yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
. Asumí que Z
es solo un personaje aquí. Recuerde, también Z
tiene un significado especial. Si desea Z
especificar como basic hms
sería el formato yyyy-MM-dd'T'HH:mm:ss.SSSZ
.
Swift 4
import Foundation
let dateString = "2014-07-15" // change to your date format
var dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let date = dateFormatter.date(from: dateString)
println(date)
Swift 3
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.
dd
lugar de DD
debería ayudar a solucionar el problema de "siempre enero".
yyyy-MM-dd
contrario, la fecha analizada se atasca en enero: actualicé la respuesta para reflejar el cambio.
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
}
import Foundation
extension DateFormatter {
convenience init (format: String) {
self.init()
dateFormat = format
locale = Locale.current
}
}
extension String {
func toDate (dateFormatter: DateFormatter) -> Date? {
return dateFormatter.date(from: self)
}
func toDateString (dateFormatter: DateFormatter, outputFormat: String) -> String? {
guard let date = toDate(dateFormatter: dateFormatter) else { return nil }
return DateFormatter(format: outputFormat).string(from: date)
}
}
extension Date {
func toString (dateFormatter: DateFormatter) -> String? {
return dateFormatter.string(from: self)
}
}
var dateString = "14.01.2017T14:54:00"
let dateFormatter = DateFormatter(format: "dd.MM.yyyy'T'HH:mm:ss")
let date = Date()
print("original String with date: \(dateString)")
print("date String() to Date(): \(dateString.toDate(dateFormatter: dateFormatter)!)")
print("date String() to formated date String(): \(dateString.toDateString(dateFormatter: dateFormatter, outputFormat: "dd MMMM")!)")
let dateFormatter2 = DateFormatter(format: "dd MMM HH:mm")
print("format Date(): \(date.toString(dateFormatter: dateFormatter2)!)")
Si va a necesitar analizar la cadena en una fecha con frecuencia, 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
}
}
Luego, si desea convertir su cadena en un NSDate, puede escribir algo como:
var myDate = myDateString.toDateTime()
hh
debería ser HH
en este caso.
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)
}
Lo primero que Apple menciona es que guardas en caché tu formateador ...
Enlace al documento de Apple que indica exactamente cómo hacer esto:
Formateadores de caché para eficiencia Crear un formateador de fecha no es una operación barata. ... caché de una sola instancia ...
Utilice un global ...
let df : DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
return formatter
}()
Luego, simplemente use 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 convenientes en DateFormatter.
(Si escribe una extensión en String, su código está completamente "al revés" - ¡no puede usar ninguna llamada dateFormatter!)
Tenga en cuenta que generalmente tendrá algunos de esos globales .. como "formatForClient" "formatForPubNub" "formatForDisplayOnInvoiceScreen" ... etc.
Extensiones de apoyo Swift, la extensión se puede añadir una nueva funcionalidad a una ya existente class
, structure
, enumeration
, o protocol
tipo.
Puede agregar una nueva init
función al NSDate
objeto extendiendo el objeto usando la extension
palabra clave.
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")
df.date(from: beginDateString)
, ¡obtengo un cero! ¿por qué? ( df = DateFormatter()
)
Desde Swift 3, muchos de los prefijos NS se han eliminado.
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)
df.date(from: beginDateString)
, ¡obtengo un cero! ¿por qué? ( df = DateFormatter()
)
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)
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 DEVOLVERÁ LA CADENA ORIGINAL SI ERROR
Este trabajo para mi ..
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!)
}
A continuación se muestran algunas opciones de conversión de formato de cadena a fecha en iOS rápido.
Thursday, Dec 27, 2018
formato = EEEE, MMM d, yyyy
12/27/2018
formato = MM/dd/yyyy
12-27-2018 09:59
formato = MM-dd-yyyy HH:mm
Dec 27, 9:59 AM
formato = MMM d, h:mm a
December 2018
formato = MMMM yyyy
Dec 27, 2018
formato = MMM d, yyyy
Thu, 27 Dec 2018 09:59:19 +0000
formato = E, d MMM yyyy HH:mm:ss Z
2018-12-27T09:59:19+0000
formato = yyyy-MM-dd'T'HH:mm:ssZ
27.12.18
formato = dd.MM.yy
09:59:19.815
formato = HH:mm:ss.SSS
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
}
Puedes probar este código rápido
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"//same as strDate date formator
dateFormatter.timeZone = TimeZone(abbreviation: "GMT+0:00")//Must used if you get one day less in conversion
let convertedDateObject = dateFormatter.date(from: strDate)
SWIFT 5 , Xcode 11.0
Pase su (fecha en cadena) en "dateString" y en el formato de pase "dateFormat" que desee. Para elegir el formato, use el sitio web NDateFormatter .
func getDateFrom(dateString: String, dateFormat: String) -> Date? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = dateFormat
dateFormatter.locale = Locale(identifier: "en_US")
guard let date = dateFormatter.date(from: dateString) else {return nil}
return date
}
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