¿Cómo puedo convertir esta cadena "2016-04-14T10:44:00+0000"
en una NSDate
y mantener solo el año, mes, día y hora?
En T
el medio de esto, realmente arroja lo que estoy acostumbrado cuando trabajo con fechas.
fuente
¿Cómo puedo convertir esta cadena "2016-04-14T10:44:00+0000"
en una NSDate
y mantener solo el año, mes, día y hora?
En T
el medio de esto, realmente arroja lo que estoy acostumbrado cuando trabajo con fechas.
Convierta la cadena ISO8601 a la fecha
let isoDate = "2016-04-14T10:44:00+0000"
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX") // set locale to reliable US_POSIX
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
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 crea un nuevo Date
objeto y tira minutos y segundos
let finalDate = calendar.date(from:components)
Considere también el formateador de conveniencia ISO8601DateFormatter
introducido en iOS 10 / macOS 12:
let isoDate = "2016-04-14T10:44:00+0000"
let dateFormatter = ISO8601DateFormatter()
let date = dateFormatter.date(from:isoDate)!
.hour
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)
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
}
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
}
}
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!)
Solo estás pasando tu dateformate
y tu fecha y luego obtienes 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
hacer una función global
func convertDateFormat(inputDate: String) -> String {
let olDateFormatter = DateFormatter()
olDateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
let oldDate = olDateFormatter.date(from: inputDate)
let convertDateFormatter = DateFormatter()
convertDateFormatter.dateFormat = "MMM dd yyyy h:mm a"
return convertDateFormatter.string(from: oldDate!)
}
Función llamada y valor de paso en ella
get_OutputStr = convertDateFormat(inputDate: "2019-03-30T05:30:00+0000")
y aquí está la salida
Feb 25 2020 4:51 PM
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: - 30 mar 2019 05:30 PM
solo el paso 1> obtenga el valor de cadena de JSON o dataSource
Paso 2> crea una variable local y asígnela.
let startDate = CurrentDashBoard.startdate
Paso 3> crea una instancia de DateFormatter.
let dateFormatter = DateFormatter()
paso 4> llama al dateFormat desde dateFormatter y proporciona el tipo de datos de fecha guardado.
dateFormatter.dateFormat = "MM-dd-yyyy HH:mm:ss"("may be String formate")
paso 5> Asigna la variable Local a esta variable para convertir.
let dateFromStringstartDate : NSDate = dateFormatter.date(from: startDate)! as NSDate
Paso 6> proporcione el formato de fecha requerido con el siguiente código.
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm:ss"
Paso 6> Asignarlo a etiqueta / texto
cell.lblStartDate.text = String(format: "%@", strstartDate)
Código:
let startDate = CurrentDashBoard.startdate let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM-dd-yyyy HH:mm:ss" let dateFromStringstartDate :
NSDate = dateFormatter.date(from: startDate)! as NSDate
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm:ss"
let strstartDate = dateFormatter.string(from: dateFromStringstartDate as Date)
Swift 5. Para ver SI HA PASADO UNA FECHA:
let expiryDate = "2020-01-10" // Jan 10 2020
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
if Date() < dateFormatter.date(from: expiryDate) ?? Date() {
print("Not Yet expiryDate")
} else {
print("expiryDate has passed")
}
Me estaba volviendo loco con este formato también.
Vea la solución a continuación.
Su cadena que vino de su espalda u otra fuente:
let isoDate = "2020-05-06 20:00:00-03"
Identifica el formato de fecha
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd' 'HH:mm:ssZ"
let date = dateFormatter.date(from:isoDate)!
Ahora que tiene la fecha como Fecha (), puede cambiar el formato que desee utilizando formatDate.string
let formatDate = DateFormatter()
formatDate.dateFormat = "dd/MM/yyyy HH:mm"
let drawDate = formatDate.string(from: date)
print(drawDate)
Salida:
06/05/2020 20:00
Utilice una biblioteca de análisis ISO8601 para hacer esto. Hay muchas 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.
Solo usa SwifterSwift.
stringDate = "2020-04-26T08:56:17.987Z"
let date = Date(iso8601String: stringDate)