Herramientas
Cómo obtener la hora actual en swift
Aspectos esenciales de Swift: Cómo obtener la hora actual con Date, Calendar y DateFormatter
Obtener la hora actual en Swift es sencillo, pero los detalles importan si se busca un resultado confiable y adaptado a la configuración regional para el desarrollo en iOS. La base es el tipo Date, que representa un punto absoluto en el tiempo (segundos desde una época de referencia). Inicializar Date crea una marca de tiempo “ahora”, y a partir de ahí, los desarrolladores extraen componentes (hora, minuto, segundo) usando Calendar o generan texto legible con DateFormatter. Aunque Date().description puede imprimir un valor, esa cadena no está pensada para interfaces de usuario. Usar DateFormatter con patrones y locales explícitos asegura un formato de hora predecible y una visualización precisa en diferentes regiones.
Considera un equipo de producto que lanza una aplicación de productividad que necesita obtener la hora actual cuando el usuario abre el panel principal. La app obtiene Date(), usa Calendar.current para extraer la hora y el minuto, y luego formatea un saludo como “Buenas tardes, 14:05.” Detrás de este mensaje simple hay decisiones deliberadas: especificar la configuración regional del usuario, confirmar la preferencia del dispositivo por reloj de 24 o 12 horas, y evitar desviaciones en la zona horaria confiando en TimeZone.current para mostrar la hora local o UTC para registro. Cada una de estas elecciones protege la experiencia del usuario de sorpresas como cambios por horario de verano, puntuación específica de la región y números incompatibles.
Los patrones prácticos para el desarrollo incluyen construir una función de formato reutilizable que acepte una Date y retorne una cadena para el usuario. Con DateFormatter, establece un dateFormat estable como “HH:mm:ss” para un reloj de 24 horas o “h:mm:ss a” para uno de 12 horas con marcador AM/PM. Para datos legibles por máquinas (analíticas, sincronización de servidor), prefiere la semántica ISO 8601 mediante ISO8601DateFormatter o un formato fijo como “yyyy-MM-dd’T’HH:mm:ssZZZZZ”. La API de Calendar ofrece la otra mitad: Calendar.component(.hour, from: Date()) retorna la hora como entero, mientras que DateComponents puede extraer y armar varios campos a la vez, ideal para reglas de negocio como “redondear al siguiente cuarto de hora.”
Dado que el rendimiento importa en pantallas sensibles al tiempo, guarda en caché las instancias de DateFormatter en lugar de crearlas repetidamente. La inicialización de DateFormatter es relativamente costosa, y reutilizar un formateador reduce la sobrecarga. Al mostrar la hora actual cada segundo (por ejemplo, en un cronómetro), actualiza solo la parte visible y evita asignaciones innecesarias. Para desarrolladores que prototipan rápido, combinar técnicas Swift con herramientas puede ser útil; por ejemplo, explorar un SDK para nuevas apps y experimentación puede inspirar utilidades rápidas para probar formatos, mientras que un pequeño ayudante como una calculadora rápida de porcentajes puede asistir al traducir duraciones en anillos de progreso proporcionales.
También existe un matiz histórico. Swift reemplaza NSDate con el valor tipo Date, pero el comportamiento subyacente de Foundation permanece consistente: Date es independiente de la zona horaria hasta que se formatea para humanos. Esa separación de responsabilidades es útil. Significa que “ahora” es universalmente el mismo instante, y solo la presentación varía. Esta división permite un transporte de datos agnóstico y una visualización específica de región, un principio clave para apps transfronterizas. En los equipos, establecer un diccionario compartido de patrones de fecha previene desviaciones entre módulos y ayuda a QA a detectar cadenas desalineadas temprano.
Finalmente, probar la hora es más sencillo de lo que parece. Introduce una dependencia de “reloj” (un protocolo simple que devuelve Date) para que las pruebas puedan inyectar horas fijas. Esto hace que las aserciones sean determinísticas, cubriendo escenarios como los últimos segundos antes de la medianoche o los minutos límite alrededor de cambios por horario de verano. Tal disciplina mantiene la lógica de producción clara y evita inestabilidad cuando los dispositivos viajan entre zonas horarias.
- 🔹 Usa Date() como fuente de verdad “ahora.”
- 🔹 Prefiere Calendar para componentes; evita analizar cadenas para números.
- 🔹 Confía en DateFormatter para cadenas para usuario; configura locale y timeZone explícitamente.
- 🔹 Guarda en caché los formateadores para rendimiento ⚡.
- 🔹 Mantén los formatos para máquinas en ISO 8601 para interoperabilidad limpia 🌐.
| Enfoque 🧭 | Qué retorna ⏱️ | Cuándo usar ✅ | Advertencias ⚠️ |
|---|---|---|---|
| Date().description | Cadena estilo depuración | Registros temporales | No estable para UI; sorpresas de localización/zona horaria |
| Calendar.component | Hora/minuto/segundo numérico | Lógica de negocio y comparaciones | No es para usuario; debes formatear aparte |
| DateFormatter | Cadena localizada o personalizada | Etiquetas de UI y accesibilidad | Requiere caché; patrón debe ser explícito |
| ISO8601DateFormatter | Cadena estandarizada (ej. 2025-03-14T09:26:53Z) | APIs, logs, analíticas | No siempre ideal para usuarios finales |
Como regla general, extrae con Calendar y presenta con DateFormatter: esta división mantiene la lógica limpia y predecible.

Zonas horarias, configuraciones regionales y UTC: Obtener la hora actual correctamente en desarrollo para iOS
Mostrar la hora actual con precisión implica tres capas: el instante (Date), las reglas regionales (TimeZone) y la presentación cultural (Locale). Date representa un momento universal, TimeZone lo traduce al tiempo local del reloj, y Locale decide cómo se ve esa hora (dígitos, puntuación, calendario). Para una app global que muestra “ahora” en paneles, tablas de líderes o reservas, combinar estas capas con precisión evita confusión en los usuarios. Si un ETA de entrega muestra “07:00” pero el dispositivo usa reloj de 12 horas, la discordancia reduce la confianza. Por eso la formateo de “ahora” debe establecer explícitamente una zona horaria y configuración regional o depender conscientemente de los valores por defecto del sistema.
Al imprimir en UTC, configura la zona horaria del formateador como TimeZone(secondsFromGMT: 0) y usa un estándar como ISO 8601. Para la hora local, usa TimeZone.current, que respeta ajustes de sistema, incluido el horario de verano. La configuración regional tiene igual importancia: en_US puede preferir “3:05 PM”, mientras que fr_FR podría mostrar “15:05.” Los sistemas numéricos también pueden variar; los locales árabes usan dígitos arábigo-índicos por defecto. No especificar la configuración regional puede causar artefactos no deseados en pruebas automatizadas o capturas de pantalla. Usar Locale.autoupdatingCurrent es una opción práctica cuando se busca reflejar las preferencias del usuario inmediatamente.
Más allá de la visualización, la distinción entre “hora de pared” y “tiempo absoluto” es importante para análisis y programación. Para eventos en servidor, registra en UTC usando ISO8601DateFormatter. Para notificaciones en dispositivo, convierte los tiempos de evento a la zona horaria actual del usuario justo antes de programar por si el usuario viaja. Los desarrolladores también pueden verificar la lógica construyendo pequeños entornos y utilidades; experimentar con SDK asistentes como prototipos con un SDK de IA puede acelerar la iteración en matrices regionales complejas, mientras que herramientas rápidas como una calculadora sencilla ayuda a validar compensaciones, cuentas regresivas o progresos basados en porcentaje.
Es útil estandarizar patrones en todo el código. Por ejemplo, define un formateador “Hora UI” con dateStyle = .none, timeStyle = .medium, timeZone = .current y locale = .autoupdatingCurrent. Define otro formateador “Sello UTC” para logs con ISO 8601. El modelo mental se vuelve: Date absoluto de entrada, TimeZone y Locale para presentación. Cuando QA prueba en simuladores configurados en Tokio, Berlín y Nueva York, estos formateadores deberían producir resultados correctos y predecibles sin modificar la lógica.
- 🌍 Usa UTC para pipelines de datos y auditorías.
- 🕘 Usa TimeZone.current para etiquetas visibles al usuario.
- 💬 Especifica Locale para alinear numerales y puntuación.
- 🧪 Realiza pruebas de captura de pantalla con cadenas formateadas en distintas configuraciones regionales.
- 🧭 Considera ISO 8601 para confiabilidad entre sistemas.
| Destino de visualización 🎯 | Opciones de formateador/zona horaria 🧩 | Ejemplo de salida 🖨️ | Notas 📝 |
|---|---|---|---|
| Registros de depuración | ISO8601DateFormatter, UTC | 2025-07-08T14:22:31Z | Universal y ordenable ✅ |
| Etiqueta de usuario (EE. UU.) | DateFormatter, Locale en_US, TimeZone.current | 3:22:31 PM | Reloj de 12 horas con AM/PM 🇺🇸 |
| Etiqueta de usuario (FR) | DateFormatter, Locale fr_FR, TimeZone.current | 15:22:31 | 24 horas, sin AM/PM 🇫🇷 |
| Payload de API | ISO8601DateFormatter, UTC | 2025-07-08T14:22:31+00:00 | Estable para servicios 🔗 |
Una búsqueda rápida puede ser útil para una guía visual de formateadores y zonas horarias.
La interacción entre Date, TimeZone y Locale sostiene cada etiqueta precisa de tiempo. Hecho correctamente, los usuarios se sienten inmediatamente en casa, ya hablen inglés, árabe o japonés.
Solo la hora: Extrayendo horas, minutos y segundos en programación Swift
Muchas apps solo necesitan la parte de tiempo del “ahora”. Un temporizador de meditación, una cuenta regresiva de tránsito o la hora prometida en un café dependen de horas, minutos y segundos sin fecha. La API de Calendar de Swift brilla aquí: Calendar.component(.hour, from: Date()) obtiene la hora como un entero. Encadenar llamadas al componente obtiene minutos y segundos; o usa DateComponents para reunir el trío eficientemente. Estos valores numéricos pueden después alimentar lógica como cambiar temas al amanecer, calcular “minutos hasta cierre” o animar un anillo de progreso radial.
Formatear “solo la hora” para mostrar es dominio de DateFormatter. Si el dispositivo usa reloj de 12 horas, “7:05 PM” se ve natural; si está en 24 horas, se espera “19:05”. Respetar esa preferencia es tan fácil como elegir timeStyle = .short o .medium y dejar que el sistema escoja los símbolos apropiados. Sin embargo, algunos diseños demandan control explícito: con dateFormat “HH:mm:ss”, el resultado siempre usa reloj de 24 horas, sin importar las configuraciones del sistema. Elige el camino según las necesidades del producto. Si la pantalla es para herramientas internas o paneles, imponer “HH:mm:ss” puede reducir ambigüedades en equipos globales.
Un detalle sutil surge con horas alrededor de la medianoche. Al extraer números con Calendar, 00 indica medianoche en formato 24 horas, pero en notación de 12 horas, la medianoche es 12:00 AM. Ten en cuenta esta correspondencia al convertir enteros crudos en texto personalizado o al asociar números con marcadores de AM/PM localizados. También, cuida los minutos y segundos con ceros a la izquierda; al construir un reloj digital, asegúrate de que “07:05:09” mantenga dos dígitos por componente. Los patrones “mm” y “ss” de DateFormatter garantizan el relleno correcto con ceros.
En cuanto a rendimiento, temporizadores que pitan cada segundo pueden ser pesados si crean nuevos formateadores constantemente. Crea un formateador una vez, guárdalo, y cambia solo la entrada Date en cada tic. Para ejemplos en el dispositivo, los desarrolladores suelen construir un pequeño playground para probar patrones de tokens y medir uso de CPU. Herramientas auxiliares como un playground de SDK pueden acelerar esta experimentación. Si una UI calcula el porcentaje del tiempo transcurrido para una tarea, valida las matemáticas con ayudantes como una calculadora rápida para evitar errores de porcentaje que afecten la visualización.
- ⏰ Extrae componentes con Calendar.component para la lógica.
- 🗣️ Usa DateFormatter para respetar preferencias del usuario.
- 🧭 Para diseños estrictos, impone patrones como “HH:mm:ss”.
- 🧮 Rellena con ceros minutos y segundos para mantener la UI estable.
- 🧱 Guarda en caché formateadores para actualizaciones segundo a segundo.
| Token 🧩 | Significado ⌚ | Ejemplo (19:05:09) 🖨️ | Notas 📝 |
|---|---|---|---|
| HH | Hora (00–23) | 19 | Formato de 24 horas ✅ |
| h | Hora (1–12) | 7 | Reloj de 12 horas, combina con a 🅰️ |
| mm | Minuto (00–59) | 05 | Siempre con cero a la izquierda 🔒 |
| ss | Segundo (00–59) | 09 | Cero a la izquierda; no hay segundos intercalares en Foundation ⛔ |
| a | Marcador AM/PM | PM | Texto localizado depende de Locale 🌐 |
Para hora solo en UI, piensa “números para lógica, formateador para visualización.” Esto mantiene el diseño claro y el código fácil de mantener.

Programación, temporizadores y rendimiento: hora actual en apps reales
Obtener la hora actual es solo el primer paso; el siguiente desafío es actualizarla de forma confiable. Cuando una etiqueta debe actualizarse cada segundo o una cuenta regresiva debe desvanecerse suavemente, elige el temporizador adecuado. Timer funciona bien para actualizaciones modestas en el hilo principal. Para programación precisa y compatible con ejecución en segundo plano, DispatchSourceTimer ofrece control más fino y tolerancia. Al vincular animaciones a la frecuencia de actualización de la pantalla, CADisplayLink sincroniza las actualizaciones con la tasa de refresco del display. Selecciona según necesidades de precisión y presupuesto energético.
Más allá de la “hora de pared”, las mediciones de rendimiento requieren un reloj monótono. Como Date puede “saltar” si el usuario cambia la hora del sistema o por actualizaciones de zona horaria, confía en fuentes monótonas para medir duraciones transcurridas. Foundation y el sistema ofrecen temporizadores monótonos internamente; para código práctico, leer el tiempo de actividad del sistema (ej. ProcessInfo.systemUptime) o usar abstracciones modernas de Clock para tiempo continuo previene desviaciones en cronómetros y telemetría. El reloj correcto elimina fallas al medir o calcular progresos en segundos y minutos.
Un patrón efectivo es separar responsabilidades: un componente calcula el siguiente tic con un reloj estable y otro formatea el tiempo mostrado con DateFormatter según la configuración regional del usuario. Esta separación mantiene las animaciones suaves y el resultado legible. En apps de producción, considera añadir tolerancia ligera a los temporizadores para ahorrar batería, a menos que se requiera alineación precisa por segundo (ej., una app de trading al inicio de mercado). Para prototipos y demos, usar SDKs auxiliares como un SDK de apps IA puede acortar dramáticamente ciclos de iteración automatizando tareas reiterativas.
- ⏳ Usa Timer para tics simples en hilo principal.
- 🧵 Prefiere DispatchSourceTimer para programación precisa.
- 🖼️ Usa CADisplayLink para actualizaciones sincronizadas a animaciones.
- ⚙️ Mide duraciones con reloj monótono para evitar saltos.
- 🔋 Añade tolerancia para ahorrar energía cuando sea posible.
| Opción 🛠️ | Mejor para 🎯 | Precisión ⏱️ | Notas 📝 |
|---|---|---|---|
| Timer | Etiquetas UI, relojes casuales | Buena | Sencillo; afectado por carga del run loop |
| DispatchSourceTimer | Trabajo en segundo plano, tics precisos | Alta | Control fino de intervalos y permiso ✅ |
| CADisplayLink | Actualizaciones sincronizadas a animación | Precisión por frame | Combina con ciclos de renderizado 🎨 |
Para una visión práctica de patrones de programación y actualizaciones suaves en UI, los videos explicativos pueden solidificar conceptos antes de implementarlos.
Elige el temporizador según precisión y compromiso energético, luego formatea la etiqueta final con DateFormatter para un acabado pulido.
Pruebas, casos límite y mejores prácticas para formateo de tiempo en Swift
El tiempo es engañosamente complejo porque las reglas humanas evolucionan. Las apps deben manejar cambios por horario de verano, viajes y cambios de preferencia del usuario. La clave es la capacidad de prueba. Abstrae el “ahora” detrás de un protocolo pequeño (ej., un Clock que devuelve Date) e inyecta un valor fijo en pruebas unitarias. Esto permite que QA simule de 01:59 a 03:01 durante un adelanto de primavera y asegure que etiquetas y cuentas regresivas se comporten correctamente. Las pruebas de captura de pantalla en distintas configuraciones regionales validan puntuación y numerales. Para chequeos caja negra, registra cadenas ISO 8601 UTC como verdad fundamental mientras que las pruebas UI verifican cadenas localizadas.
Los casos límite incluyen cierres de mes, cambios de tiempo impulsados por usuarios y demoras de red. Como Foundation no modela segundos intercalares, alinea expectativas con la visión del sistema: los segundos corren de 00 a 59. Donde las reglas de negocio dependan de plazos legales precisos, basa cálculos en UTC y convierte a horario local solo para mostrar. Si un usuario cambia entre reloj de 12 y 24 horas durante la ejecución de la app, prefiere DateFormatter atado a Locale.autoupdatingCurrent para que UI se actualice naturalmente. Si el cumplimiento requiere una hora de servidor exacta, sincroniza periódicamente vía APIs confiables y ajusta compensaciones con cuidado para evitar saltos bruscos en UI.
La accesibilidad e inclusión importan. Las cadenas de tiempo deben ser amigables con VoiceOver. Por ejemplo, prefiere timeStyle = .short para claridad en el habla, y si se usan cadenas personalizadas, asegura que puntuación y espacios se lean bien al hablar. Los idiomas de derecha a izquierda también influyen en el diseño; mantén etiquetas de tiempo adaptables y evita dos puntos o espacios estrechos codificados que puedan ajustarse de forma extraña. Con Dynamic Type, garantiza que la hora siga legible—prueba con tamaños muy grandes y modos de alto contraste. La confiabilidad se siente “invisible” para los usuarios, pero es una ventaja competitiva.
Operativamente, registra el “ahora” con formato UTC consistente para que alertas y paneles correlacionen entre equipos. Los desarrolladores suelen mantener un “catálogo de formateo” que lista cada patrón usado, dónde aparece y quién es responsable. Automatizar parte de esto con un asistente puede reducir la carga cognitiva; para exploración, revisa recursos como playgrounds de SDK para prototipos rápidos y ayudantes matemáticos rápidos como cálculos porcentuales para convertir duraciones en indicadores de progreso. Finalmente, centraliza instancias de formateadores usando inyección de dependencias para evitar la creación accidental de docenas de formateadores en view models.
- 🧪 Inyecta una dependencia tipo Clock para congelar el “ahora” en pruebas.
- 🌐 Registra con ISO 8601 UTC para auditorías consistentes.
- ♿ Valida con VoiceOver y Dynamic Type para claridad.
- 🔁 Usa Locale.autoupdatingCurrent para reflejar cambios en configuraciones del usuario.
- 📚 Mantén un catálogo de todos los patrones usados de DateFormatter.
| Trampa 🚩 | Impacto 😬 | Mitigación ✅ | Herramientas 💼 |
|---|---|---|---|
| Local fijo en código | Números/puntuación incorrectos | Usa locale autoupdating | Pruebas de captura en múltiples locales 🧭 |
| Zona horaria equivocada | Hora local incorrecta | Configura timeZone del formateador explícitamente | Matriz QA con escenarios de viaje ✈️ |
| Nuevo formateador en cada tic | Batería afectada y tartamudeos | Guarda en caché DateFormatter | Instruments Time Profiler ⚙️ |
| Usar Date para tiempo transcurrido | Saltos por cambios de hora del sistema | Usa reloj monótono | Medición basada en uptime ⏳ |
Un buen manejo del tiempo es excelencia silenciosa: nadie lo nota cuando es perfecto, pero todos notan cuando no lo es.
De Swift a producción: Patrones para obtener la hora actual con confianza
Convertir el conocimiento en un enfoque listo para producción significa codificar patrones. Comienza declarando un TimeService que exponga now como Date y algunos formateadores estándar: hora corta UI, hora media UI, y ISO 8601 para logs. Añade un ayudante para extraer componentes con Calendar, y otro para formatear mensajes relativos como “en 5 minutos.” Centralizar esto elimina duplicación y evita desviaciones en equipos. A medida que la app evoluciona, este servicio puede exponer funciones convenientes como “localNowString()” o “utcStamp()” para asegurar uso consistente.
Para escalabilidad, documenta expectativas de formateo en el sistema de diseño. Especifica si se debe respetar la preferencia del dispositivo por 12/24 horas o imponer un estándar en ciertos contextos, y lista los tokens exactos de formateo de hora. Proporciona ejemplos y capturas para los principales locales. En tiempos de alta demanda, es fácil que los equipos improvisen patrones que difieran sutilmente; esta documentación mantiene a todos alineados. Los equipos también pueden beneficiarse de la automatización: genera capturas entre locales cada noche y compara para detectar regresiones temprano. Una pequeña inversión ahorra tickets de soporte luego.
Para experimentación ágil, herramientas que automaticen la estructura base pueden ayudar. Investigar algo como herramientas playground SDK acelera la iteración al probar combinaciones de Date, Calendar y DateFormatter a escala. Y cuando se convierten segundos transcurridos en porcentajes de progreso, un ayudante como una calculadora ligera evita errores mentales que aparecen en demos. Estos pequeños apoyos aseguran que incluso bajo presión, la UI refleje la verdad en tiempo real.
Finalmente, alinea análisis e interacciones con servidor en UTC mientras mantienes el reloj local del usuario para la interfaz. Cuando surgen conflictos—como un usuario en una zona horaria viendo un evento creado en otra—aplica una regla consistente: guarda en UTC, muestra en local, incluye la zona de origen si aclara. Esta regla sirve para calendarios y ETAs de servicios de transporte. Mantiene las tuberías limpias y la presentación amigable.
- 🧱 Crea un TimeService para “ahora”, formateadores y ayudantes.
- 📐 Documenta patrones de tokens y decisiones 12/24 horas.
- 🖼️ Automatiza capturas multi-local para detectar rupturas.
- 🌐 Guarda en UTC; muestra en local; anota cuando ayude.
- 🧰 Usa herramientas confiables de prototipado para avanzar rápido sin romper el tiempo ⏰.
| Capa 🧊 | Responsabilidad 🧭 | Ejemplo 📌 | Beneficio 🎉 |
|---|---|---|---|
| Fuente | Proveer “ahora” como Date | now = Date() | Única verdad del tiempo ✅ |
| Lógica | Extraer componentes con Calendar | hora/minuto/segundo | Reglas de negocio robustas 🧮 |
| Formato | Renderizar con DateFormatter | “HH:mm:ss” o .short | Presentación localizada 🌍 |
| Almacenamiento | Cadenas UTC para servicios | Sello ISO 8601 | Interoperabilidad 🔗 |
El manejo del tiempo pasa de “funciona en mi teléfono” a “a prueba de balas en todo el mundo” cuando estos patrones forman memoria muscular en el código.
{“@context”:”https://schema.org”,”@type”:”FAQPage”,”mainEntity”:[{“@type”:”Question”,”name”:”How do you get the current time in Swift without the date?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”Use Calendar to extract hour, minute, and second from Date(). For user-facing text, format the same Date with a DateFormatter configured with timeStyle and the useru2019s Locale.”}},{“@type”:”Question”,”name”:”Whatu2019s the difference between Date and NSDate?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”NSDate is the Objectiveu2011C reference type; Swiftu2019s Date is a value type that bridges to NSDate. Prefer Date in modern Swift programming for safer semantics and value semantics.”}},{“@type”:”Question”,”name”:”Why not use Date().description for UI?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”It returns a debug-oriented string that is not stable or localized for end users. Always format with DateFormatter or ISO8601DateFormatter as appropriate.”}},{“@type”:”Question”,”name”:”How should time be logged for APIs and analytics?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”Log in UTC using ISO 8601 (e.g., 2025-07-08T14:22:31Z). For display, convert the same Date to the useru2019s TimeZone.current and format with the appropriate Locale.”}},{“@type”:”Question”,”name”:”Whatu2019s the best timer for updating a clock label every second?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”Use Timer for simple main-thread updates, DispatchSourceTimer for precision or background use, and CADisplayLink when updates must match the displayu2019s refresh rate.”}}]}¿Cómo obtener la hora actual en Swift sin la fecha?
Usa Calendar para extraer la hora, el minuto y el segundo de Date(). Para texto dirigido al usuario, formatea la misma Date con un DateFormatter configurado con timeStyle y el Locale del usuario.
¿Cuál es la diferencia entre Date y NSDate?
NSDate es el tipo referencia de Objective‑C; Date de Swift es un tipo por valor que se puentea a NSDate. Prefiere Date en programación Swift moderna por semántica más segura y valor semántico.
¿Por qué no usar Date().description para UI?
Retorna una cadena orientada a depuración que no es estable ni localizada para usuarios finales. Siempre formatea con DateFormatter o ISO8601DateFormatter según corresponda.
¿Cómo se debe registrar la hora para APIs y analíticas?
Registra en UTC usando ISO 8601 (ej., 2025-07-08T14:22:31Z). Para mostrar, convierte la misma Date a TimeZone.current del usuario y formatea con el Locale correspondiente.
¿Cuál es el mejor temporizador para actualizar una etiqueta de reloj cada segundo?
Usa Timer para actualizaciones simples en el hilo principal, DispatchSourceTimer para precisión o uso en background, y CADisplayLink cuando las actualizaciones deben coincidir con la frecuencia de refresco del display.
-
Modelos de IA21 hours agomodelos vietnamitas en 2025: nuevas caras y estrellas emergentes para observar
-
17 hours agoDesbloquea el Poder del Chat en Grupo de ChatGPT Gratis: Una Guía Paso a Paso para Comenzar
-
Tecnologia8 hours agoUna visión integral del panorama tecnológico en Palo Alto para 2025
-
Tecnologia3 days agoSu tarjeta no admite este tipo de compra: qué significa y cómo solucionarlo
-
Modelos de IA3 days agoOpenAI vs Tsinghua: Elegir entre ChatGPT y ChatGLM para tus necesidades de IA en 2025
-
6 hours agoPresentando una versión gratuita de ChatGPT diseñada específicamente para educadores