obtener hora fecha actual datetime swift

datetime - hora - obtener fecha actual java



Cómo obtener la hora actual como fecha y hora (17)

Acaba de empezar con el patio de recreo. Estoy tratando de crear una aplicación simple.

He creado un objeto de fecha como este:

var date = NSDate()

¿Cómo puedo obtener la hora actual? En otros idiomas puedo hacer algo como esto:

var hour = date.hour

Pero no puedo encontrar ninguna propiedad / método como ese. He encontrado un método, dateWithCalendarFormat . ¿Debo usar eso? ¿Si es así, cómo?


Usando Date Formatter -Swift 3.0

//Date let dateFormatter = DateFormatter() dateFormatter.dateStyle = .medium let dateString = "Current date is: /(dateFormatter.string(from: Date() as Date))" labelfordate.text = String(dateString) //Time let timeFormatter = DateFormatter() timeFormatter.timeStyle = .medium let timeString = "Current time is: /(timeFormatter.string(from: Date() as Date))" labelfortime.text = String(timeString)

Fecha y hora de actualización cada segundo

override func viewDidLoad() { super.viewDidLoad() timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(DateAndTime.action), userInfo: nil, repeats: true) } func action() { //Date let dateFormatter = DateFormatter() dateFormatter.dateStyle = .medium let dateString = "Current date is: /(dateFormatter.string(from: Date() as Date))" labelfordate.text = String(dateString) //Time let timeFormatter = DateFormatter() timeFormatter.timeStyle = .medium let timeString = "Current time is: /(timeFormatter.string(from: Date() as Date))" labelfortime.text = String(timeString) }

Nota: DateAndTime en el código del temporizador es el nombre de la clase.


Con Swift 3 y Swift 4, Foundation ofrece muchas formas para el valor de hora desde un objeto Date . De acuerdo con sus necesidades, puede elegir uno de los siguientes cuatro fragmentos de código del Patio de Recreo .

# 1. Usando el Calendar dateComponents(_:from:) método

Calendar tiene un método llamado dateComponents(_:from:) . dateComponents(_:from:) tiene la siguiente declaración:

func dateComponents(_ components: Set<Calendar.Component>, from date: Date) -> DateComponents

Devuelve todos los componentes de fecha de una fecha, usando la zona horaria del calendario.

Uso:

import Foundation let date = Date() let dateComponents = Calendar.current.dateComponents([.hour], from: date) let hour = dateComponents.hour print(String(describing: hour)) // may print: Optional(13)

# 2. Usando Calendar component(_:from:) método

Calendar tiene un método llamado component(_:from:) . component(_:from:) tiene la siguiente declaración:

Devuelve el valor para un componente de una fecha.

func component(_ component: Calendar.Component, from date: Date) -> Int

Uso:

import Foundation let date = Date() let hour = Calendar.current.component(.hour, from: date) print(hour) // may print: 13

# 3. Usando la propiedad DateFormatter dateFormat

DateFormatter tiene una propiedad llamada dateFormat . dateFormat tiene la siguiente declaración:

var dateFormat: String! { get set }

La cadena de formato de fecha utilizada por el receptor.

Uso:

import Foundation let date = Date() let dateFormatter = DateFormatter() dateFormatter.dateFormat = "HH" let hour = dateFormatter.string(from: date) print(hour) // may print: 13

# 4. Usando el Dateformatter setLocalizedDateFormatFromTemplate(_:)

Dateformatter tiene un método llamado setLocalizedDateFormatFromTemplate(_:) . setLocalizedDateFormatFromTemplate(_:) tiene la siguiente declaración:

func setLocalizedDateFormatFromTemplate(_ dateFormatTemplate: String)

Establece el formato de fecha de una plantilla usando la configuración regional especificada para el receptor.

Uso:

import Foundation let date = Date() let dateFormatter = DateFormatter() dateFormatter.setLocalizedDateFormatFromTemplate("HH") let hour = dateFormatter.string(from: date) print(hour) // may print: 13


En Swift 3,

let date = Date() let calendar = Calendar.current() let hour = calendar.component(.hour, from: date)


Puede crear una extensión en Date , de esa manera puede llamarla fácilmente en otros archivos. Aquí hay un ejemplo de una extensión de fecha que usa una propiedad computada.

Se imprimirá: "Hoy, 4:55 PM"

extension Date { var formatter: DateFormatter? { let formatter = DateFormatter() formatter.dateStyle = .short formatter.timeStyle = .short formatter.doesRelativeDateFormatting = true return formatter } }


Puedes probar esto

func getTime() -> (hour:Int, min:Int, sec:Int) { let currentDateTime = NSDate() let calendar = NSCalendar.currentCalendar() let components = calendar.components([.Hour,.Minute,.Second], fromDate: currentDateTime) let hour = components.hour let min = components.minute let sec = components.second return (hour,min,sec) }

Ahora llama a ese método y recibe la fecha con hora, min y segundo

let currentTime = self.getTime() print("Hour: /(currentTime.hour) Min: /(currentTime.min) Sec: /(currentTime.sec))")


Respuesta de Swift 2:

let date = NSDate() let calendar = NSCalendar.currentCalendar() let components = calendar.components([.Hour, .Minute], fromDate: date) let hour = components.hour let minutes = components.minute


Sé que hay muchas respuestas pero creo que la mía puede ser más conveniente para muchos

extension String { init(epoch: Double) { let date = Date(timeIntervalSince1970: epoch) let dateFormatter = DateFormatter() dateFormatter.dateFormat = "dd/MM/yyyy HH:mm:ssZZZ" self = dateFormatter.string(from: date) } }


Sólo para fecha en formato específico.

let dateFormatter1 = NSDateFormatter() dateFormatter1.dateStyle = .MediumStyle dateFormatter1.timeStyle = .NoStyle dateFormatter1.dateFormat = "dd-MM-yyyy" let date = dateFormatter1.stringFromDate(NSDate())


Swift hace que sea realmente fácil crear y usar extensiones. Creo un archivo sharedCode.swift y coloco enumeraciones, extensiones y otras cosas divertidas en él. NSDate una extensión NSDate para agregar alguna funcionalidad típica que es laboriosa y fea para escribir una y otra vez:

extension NSDate { func hour() -> Int { //Get Hour let calendar = NSCalendar.currentCalendar() let components = calendar.components(.Hour, fromDate: self) let hour = components.hour //Return Hour return hour } func minute() -> Int { //Get Minute let calendar = NSCalendar.currentCalendar() let components = calendar.components(.Minute, fromDate: self) let minute = components.minute //Return Minute return minute } func toShortTimeString() -> String { //Get Short Time String let formatter = NSDateFormatter() formatter.timeStyle = .ShortStyle let timeString = formatter.stringFromDate(self) //Return Short Time String return timeString } }

Usando esta extensión ahora puedes hacer algo como:

//Get Current Date let currentDate = NSDate() //Test Extensions in Log NSLog("(Current Hour = /(currentDate.hour())) (Current Minute = /(currentDate.minute())) (Current Short Time String = /(currentDate.toShortTimeString()))")

Que para las 11:51 AM escribiría:

(Hora actual = 11) (Minuto actual = 51) (Cadena de tiempo corto actual = 11:51 AM)


También puede utilizar el método de conveniencia de NSDateFormatter, por ejemplo,

func printTimestamp() { let timestamp = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .MediumStyle, timeStyle: .ShortStyle) print(timestamp) } printTimestamp() // Prints "Sep 9, 2014, 4:30 AM"


Usted puede obtener de Dateformatter

let dateFormatter = DateFormatter() dateFormatter.dateFormat = "dd/MM/yyyy" let dateString = dateFormatter.string(from:Date()) print(dateString)


si sólo tiene la hora del día

let calendar = NSCalendar.currentCalendar() var hour = calendar.component(.Hour,fromDate: NSDate())


Probado con Swift 4

Obtención de la fecha y hora actual

Puede obtener la fecha y hora actual de la siguiente manera:

let currentDateTime = Date()

Sin embargo, Date es un número de punto flotante de 64 bits que mide el número de segundos desde la fecha de referencia del 1 de enero de 2001 a las 00:00:00 UTC . Puedo ver ese número para la fecha y hora actual usando

Date().timeIntervalSinceReferenceDate

En el momento de escribir este artículo, devolvió 497626515.185066 , probablemente no exactamente lo que está buscando. Sigue leyendo.

Creando otra fecha y hora

Método 1

Si conoce la cantidad de segundos antes o después de la fecha de referencia, puede usar eso.

let someOtherDateTime = Date(timeIntervalSinceReferenceDate: -123456789.0) // Feb 2, 1997, 10:26 AM

Método 2

Por supuesto, sería más fácil usar cosas como años, meses, días y horas (en lugar de segundos relativos) para hacer una Date . Para esto, puede usar DateComponents para especificar los componentes y luego Calendar para crear la fecha. El Calendar da el contexto de la Date . De lo contrario, ¿cómo sabría en qué zona horaria o calendario expresarlo?

// Specify date components var dateComponents = DateComponents() dateComponents.year = 1980 dateComponents.month = 7 dateComponents.day = 11 dateComponents.timeZone = TimeZone(abbreviation: "JST") // Japan Standard Time dateComponents.hour = 8 dateComponents.minute = 34 // Create date from components let userCalendar = Calendar.current // user calendar let someDateTime = userCalendar.date(from: dateComponents)

Otras abreviaturas de zona horaria se pueden encontrar here . Si deja ese espacio en blanco, entonces el valor predeterminado es usar la zona horaria del usuario.

Método 3

La forma más sucinta (pero no necesariamente la mejor) podría ser usar DateFormatter .

let formatter = DateFormatter() formatter.dateFormat = "yyyy/MM/dd HH:mm" let someDateTime = formatter.date(from: "2016/10/08 22:31")

Los estándares técnicos de Unicode muestran otros formatos que admite DateFormatter .

Visualización de la fecha y hora

Método 1

Si solo desea mostrar ciertos componentes de la fecha o la hora, puede usar CalendarUnit para especificar los componentes que desea extraer de Date .

// get the current date and time let currentDateTime = Date() // get the user''s calendar let userCalendar = Calendar.current // choose which date and time components are needed let requestedComponents: Set<Calendar.Component> = [ .year, .month, .day, .hour, .minute, .second ] // get the components let dateTimeComponents = userCalendar.dateComponents(requestedComponents, from: currentDateTime) // now the components are available dateTimeComponents.year // 2016 dateTimeComponents.month // 10 dateTimeComponents.day // 8 dateTimeComponents.hour // 22 dateTimeComponents.minute // 42 dateTimeComponents.second // 17

Ver esta respuesta también.

Método 2

El Método 1 le dio los componentes, pero sería mucho trabajo dar formato a esos números para cada estilo, idioma y región. Y no es necesario. Esto ya se ha hecho con la clase DateFormatter .

// get the current date and time let currentDateTime = Date() // initialize the date formatter and set the style let formatter = DateFormatter() formatter.timeStyle = .medium formatter.dateStyle = .long // get the date time String from the date object formatter.string(from: currentDateTime) // October 8, 2016 at 10:48:53 PM

Aquí hay una continuación del código anterior que muestra más opciones de formato:

// "10/8/16, 10:52 PM" formatter.timeStyle = .short formatter.dateStyle = .short formatter.string(from: currentDateTime) // "Oct 8, 2016, 10:52:30 PM" formatter.timeStyle = .medium formatter.dateStyle = .medium formatter.string(from: currentDateTime) // "October 8, 2016 at 10:52:30 PM GMT+8" formatter.timeStyle = .long formatter.dateStyle = .long formatter.string(from: currentDateTime) // "October 8, 2016" formatter.timeStyle = .none formatter.dateStyle = .long formatter.string(from: currentDateTime) // "10:52:30 PM" formatter.timeStyle = .medium formatter.dateStyle = .none formatter.string(from: currentDateTime)

Sin embargo, tenga en cuenta que esto es para el inglés con la región establecida en los EE. UU. Para otros idiomas y regiones, el formato será diferente.

Estudio adicional


Actualización para Swift 3:

let date = Date() let calendar = Calendar.current let hour = calendar.component(.hour, from: date) let minutes = calendar.component(.minute, from: date)

Hago esto:

let date = NSDate() let calendar = NSCalendar.currentCalendar() let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute, fromDate: date) let hour = components.hour let minutes = components.minute

Vea la misma pregunta en objetivo-c ¿Cómo obtengo horas y minutos de NSDate?

Comparado con la respuesta de Nate, obtendrás números con este, no cadenas ... ¡elige tu opción!


Swift 3:

static func currentTime() -> String { let date = Date() let calendar = Calendar.current let hour = calendar.component(.hour, from: date) let minutes = calendar.component(.minute, from: date) return "/(hour):/(minutes)" }

PD: no estoy seguro de qué significa exactamente la pregunta al obtener la hora actual (y la hora) como fecha y hora, pero es de esperar que lo anterior sea lo suficientemente explicativo para responder la pregunta.


Swift 4

let dateFormatter : DateFormatter = DateFormatter() // dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" dateFormatter.dateFormat = "yyyy-MMM-dd HH:mm:ss" let date = Date() let dateString = dateFormatter.string(from: date) let interval = date.timeIntervalSince1970

SALIDA

2018-May-01 10:41:31


Xcode 8.2.1 • 3.0.2 Swift

extension Date { var hour: Int { return Calendar.autoupdatingCurrent.component(.hour, from: self) } }

let date = Date() // "Mar 16, 2017, 3:43 PM" let hour = date.hour // 15