example ios swift timestamp nsdateformatter

example - Swift-iOS-Fechas y horas en diferentes formatos



swift 4 dateformatter example (9)

Estoy trabajando para una aplicación escrita de forma rápida y quiero manipular fechas y horas

let timestamp = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .ShortStyle, timeStyle: .ShortStyle)

devoluciones

2/12/15, 11:27 PM

si quiero la fecha y la hora en un formato diferente, por ejemplo, la fecha en un formato europeo como dd / mm / aa y las horas en el formato de 24 h sin AM y PM, hay alguna función que puedo usar o tengo que usar N Cadenas para reordenar los diversos elementos?


Si desea usar programación orientada a protocolos (Swift 3)

1) Crea un protocolo fechable

protocol Dateable { func userFriendlyFullDate() -> String func userFriendlyHours() -> String }

2) Extiende la clase Date e implementa el protocolo Dateable

extension Date: Dateable { var formatter: DateFormatter { return DateFormatter() } /** Return a user friendly hour */ func userFriendlyFullDate() -> String { // Customize a date formatter formatter.dateFormat = "yyyy-MM-dd''T''HH:mm:ss.SSSZ" formatter.timeZone = TimeZone(abbreviation: "UTC") return formatter.string(from: self) } /** Return a user friendly hour */ func userFriendlyHours() -> String { // Customize a date formatter formatter.dateFormat = "HH:mm" formatter.timeZone = TimeZone(abbreviation: "UTC") return formatter.string(from: self) } // You can add many cases you need like string to date formatter }

3) Úselo

let currentDate: Date = Date() let stringDate: String = currentDate.userFriendlyHours() // Print 15:16


Como dijo Zaph, debes seguir la documentación. Es cierto que puede no ser el más sencillo en comparación con otras referencias de clase. La respuesta corta es que utiliza la tabla de símbolos de campo de fecha para descubrir qué formato desea. Una vez que lo haces:

let dateFormatter = NSDateFormatter() //the "M/d/yy, H:mm" is put together from the Symbol Table dateFormatter.dateFormat = "M/d/yy, H:mm" dateFormatter.stringFromDate(NSDate())

También deberá poder usar la tabla si necesita convertir una fecha que sea una cadena en un NSDate.

let dateAsString = "02/12/15, 16:48" let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "M/d/yyyy, H:mm" let date = dateFormatter.dateFromString(dateAsString)


Como ya se mencionó, debe usar NSDateFormatter para formatear sus objetos NSDate. La forma más fácil de hacerlo es crear una extensión de NSDate de propiedad computable de solo lectura.

Propiedades computadas de solo lectura

Una propiedad computada con un getter pero sin setter es conocida como una propiedad computada de solo lectura. Una propiedad computada de solo lectura siempre devuelve un valor, y se puede acceder a través de la sintaxis de punto, pero no se puede establecer en un valor diferente.

NOTA

Debe declarar las propiedades calculadas, incluidas las propiedades calculadas de solo lectura, como propiedades de variable con la palabra clave var, porque su valor no es fijo. La palabra clave let solo se usa para propiedades de constante, para indicar que sus valores no se pueden cambiar una vez que se configuran como parte de la inicialización de la instancia.

Puede simplificar la declaración de una propiedad calculada de solo lectura eliminando la palabra clave get y sus llaves:

extension NSDateFormatter { convenience init(dateFormat: String) { self.init() self.dateFormat = dateFormat } } extension NSDate { struct Formatter { static let custom = NSDateFormatter(dateFormat: "dd/M/yyyy, H:mm") } var customFormatted: String { return Formatter.custom.stringFromDate(self) } }

Para convertirlo de nuevo puede crear otra propiedad computada de solo lectura pero como una extensión de cadena:

extension String { var asDate: NSDate? { return NSDate.Formatter.custom.dateFromString(self) } func asDateFormatted(with dateFormat: String) -> NSDate? { return NSDateFormatter(dateFormat: dateFormat).dateFromString(self) } }

Uso:

let stringFromDate = NSDate().customFormatted // "14/7/2016, 2:00" if let date = stringFromDate.asDate { // "Jul 14, 2016, 2:00 AM" print(date) // "2016-07-14 05:00:00 +0000/n" date.customFormatted // "14/7/2016, 2:00" } "14/7/2016".asDateFormatted(with: "dd/MM/yyyy") // "Jul 14, 2016, 12:00 AM"


Hora de fecha actual para la cadena formateada:

let currentDate = Date() let dateFormatter = DateFormatter() dateFormatter.dateFormat = "dd/MM/yyyy hh:mm:ss a" let convertedDate: String = dateFormatter.string(from: currentDate) //08/10/2016 01:42:22 AM

Más formatos de fecha y hora


Swift 3:

//This gives month as three letters (Jun, Dec, etc) let justMonth = DateFormatter() justMonth.dateFormat = "MMM" myFirstLabel.text = justMonth.string(from: myDate) //This gives the day of month, with no preceding 0s (6,14,29) let justDay = DateFormatter() justDay.dateFormat = "d" mySecondLabel.text = justDay.string(from: myDate) //This gives year as two digits, preceded by an apostrophe (''09, ''16, etc) let justYear = DateFormatter() justYear.dateFormat = "yy" myThirdLabel.text = "''/(justYear.string(from: lastCompDate))"

Para obtener más formatos, consulte este link a una tabla codingExplorer con todos los formatos disponibles. Cada componente de fecha tiene varias opciones, por ejemplo:

Año:

  • "y" - 2016 (las fechas iniciales como el año 1 serían: "1")
  • "yy" - 16 (año 1: "01"
  • "yyy" - 2016 (año 1: "001")
  • "aaaa" - 2016 (año 1: "0001")

Casi todos los componentes tienen 2-4 opciones, usando la primera letra para expresar el formato (el día es "d", la hora es "h", etc.). Sin embargo, el mes es una "M" mayúscula, porque la minúscula "m" está reservada por minuto. Sin embargo, hay algunas otras excepciones, así que echa un vistazo al enlace.


Usé el enfoque similar a @ iod07, pero como una extensión. Además, agregué algunas explicaciones en los comentarios para entender cómo funciona.

Básicamente, simplemente agregue esto en la parte superior o inferior de su controlador de vista.

extension NSString { class func convertFormatOfDate(date: String, originalFormat: String, destinationFormat: String) -> String! { // Orginal format : let dateOriginalFormat = NSDateFormatter() dateOriginalFormat.dateFormat = originalFormat // in the example it''ll take "yy MM dd" (from our call) // Destination format : let dateDestinationFormat = NSDateFormatter() dateDestinationFormat.dateFormat = destinationFormat // in the example it''ll take "EEEE dd MMMM yyyy" (from our call) // Convert current String Date to NSDate let dateFromString = dateOriginalFormat.dateFromString(date) // Convert new NSDate created above to String with the good format let dateFormated = dateDestinationFormat.stringFromDate(dateFromString!) return dateFormated } }

Ejemplo

Supongamos que quiere convertir "16 05 05" en "Thursday 05 May 2016" y su fecha se declara como sigue let date = "16 06 05"

Entonces simplemente llame llámelo con:

let newDate = NSString.convertFormatOfDate(date, originalFormat: "yy MM dd", destinationFormat: "EEEE dd MMMM yyyy")

Espero eso ayude !



func convertDateFormater(date: String) -> String { let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd''T''HH:mm:ss.SSSZ" dateFormatter.timeZone = NSTimeZone(name: "UTC") guard let date = dateFormatter.dateFromString(date) else { assert(false, "no date from string") return "" } dateFormatter.dateFormat = "yyyy MMM EEEE HH:mm" dateFormatter.timeZone = NSTimeZone(name: "UTC") let timeStamp = dateFormatter.stringFromDate(date) return timeStamp }

Editar para Swift 4

func convertDateFormatter(date: String) -> String { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd''T''HH:mm:ss"//this your string date format dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone! dateFormatter.locale = Locale(identifier: "your_loc_id") let convertedDate = dateFormatter.date(from: date) guard dateFormatter.date(from: date) != nil else { assert(false, "no date from string") return "" } dateFormatter.dateFormat = "yyyy MMM HH:mm EEEE"///this is what you want to convert format dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone! let timeStamp = dateFormatter.string(from: convertedDate!) return timeStamp }


let usDateFormat = DateFormatter.dateFormat(FromTemplate: "MMddyyyy", options: 0, locale: Locale(identifier: "en-US")) //usDateFormat now contains an optional string "MM/dd/yyyy" let gbDateFormat = DateFormatter.dateFormat(FromTemplate: "MMddyyyy", options: 0, locale: Locale(identifier: "en-GB")) //gbDateFormat now contains an optional string "dd/MM/yyyy" let geDateFormat = DateFormatter.dateFormat(FromTemplate: "MMddyyyy", options: 0, locale: Locale(identifier: "de-DE")) //geDateFormat now contains an optional string "dd.MM.yyyy"

Puede usarlo de la siguiente manera para obtener el formato actual del dispositivo:

let currentDateFormat = DateFormatter.dateFormat(fromTemplate: "MMddyyyy", options: 0, locale: Locale.current)