Fechas, horas y zonas horarias
.NET proporciona tipos que representan fechas, horas y zonas horarias. En este artículo se describen esos tipos.
Además de la estructura de DateTime básica, .NET proporciona las siguientes clases que admiten el trabajo con zonas horarias:
-
Use esta clase para trabajar con cualquier zona horaria predefinida en un sistema, crear nuevas zonas horarias y convertir fácilmente fechas y horas de una zona horaria a otra. Para el nuevo desarrollo, use la clase TimeZoneInfo en lugar de la clase TimeZone.
-
Utiliza esta estructura para trabajar con fechas y horas cuyo desplazamiento (o diferencia) respecto a UTC es conocido. La estructura DateTimeOffset combina un valor de fecha y hora con ese desplazamiento de hora de UTC. Debido a su relación con UTC, un valor de fecha y hora individual identifica de forma inequívoca un único punto en el tiempo. Esto hace que un valor de DateTimeOffset sea más portátil de un equipo a otro que un valor de DateTime.
Las siguientes clases son para trabajar con horas:
-
Use esta estructura para representar un intervalo de tiempo, como un período de tiempo transcurrido o la diferencia entre dos fechas.
-
Use esta estructura para representar una hora sin una fecha. El tiempo representa las horas, minutos y segundos de un día no específico.
TimeOnly
tiene un intervalo de00:00:00.0000000
para23:59:59.9999999
. Este tipo se puede usar para reemplazar los tiposDateTime
yTimeSpan
en tu código cuando usaste esos tipos para representar una hora. Para obtener más información, vea Cómo usar las estructuras DateOnly y TimeOnly.Importante
TimeOnly no está disponible para .NET Framework.
-
Se trata de una clase base que proporciona una abstracción de tiempo. Una manera común de comprobar la hora actual es mediante
DateTime.UtcNow
oDateTimeOffset.UtcNow
. Sin embargo, estos tipos no proporcionan ningún control sobre lo que se considera "ahora". ¿Por qué quieres controlar eso? Capacidad de prueba. Por ejemplo, considere la posibilidad de escribir una aplicación de seguimiento de eventos que proporcione recordatorios 1 día antes del evento. La lógica de la aplicación consiste en comprobar la hora del evento cada hora y alertar al usuario una vez que falten 24 horas para el evento. A medida que escribe las pruebas para la aplicación, proporcionaría su propio tipo que encapsulaDateTimeOffset.UtcNow
para probar esta lógica, pero ahora .NET proporciona esta clase de abstracción para usted.Para obtener más información, vea ¿Qué es TimeProvider?
El tipo
TimeProvider
se incluye en .NET.Para .NET Framework y .NET Standard, el
TimeProvider
lo proporciona el paquete Microsoft.Bcl.TimeProvider NuGet.
Las siguientes clases son para trabajar con fechas:
-
Use esta estructura cuando trabaje con un valor que solo represente una fecha. La fecha representa todo el día, desde el principio del día hasta el final.
DateOnly
tiene un intervalo de0001-01-01
a9999-12-31
. Y, este tipo representa la combinación mes, día y año sin una hora específica. Si anteriormente utilizó un tipoDateTime
en su código para representar una fecha que ignoraba la hora, use este tipo en su lugar. Para obtener más información, vea Cómo usar las estructuras DateOnly y TimeOnly.Importante
DateOnly no está disponible para .NET Framework.
En la sección siguiente se proporciona la información que necesita para trabajar con zonas horarias y para crear aplicaciones compatibles con zonas horarias que pueden convertir fechas y horas de una zona horaria a otra.
En esta sección
Resumen de la zona horaria
Describe la terminología, los conceptos y los problemas relacionados con la creación de aplicaciones compatibles con zona horaria.
elegir entre dateTime, DateTimeOffset, TimeSpan y TimeZoneInfo
Describe cuándo usar los tipos de DateTime, DateTimeOffsety TimeZoneInfo al trabajar con datos de fecha y hora.
Búsqueda de las zonas horarias definidas en un sistema local
Describe cómo enumerar las zonas horarias que se encuentran en un sistema local.
Cómo enumerar las zonas horarias presentes en un ordenador
Proporciona ejemplos que enumeran las zonas horarias definidas en el registro de un equipo y que permiten a los usuarios seleccionar una zona horaria predefinida de una lista.
Cómo: Acceder a los objetos de zona horaria local y UTC predefinidos
Describe cómo acceder a la hora universal coordinada y a la zona horaria local.
Cómo: Crear una instancia de un objeto TimeZoneInfo
Describe cómo crear una instancia de un objeto TimeZoneInfo desde el registro del sistema local.
Creación de instancias de un objeto DateTimeOffset
Describe las formas en que se puede crear una instancia de un objeto DateTimeOffset y las formas en que se puede convertir un valor DateTime en un valor de DateTimeOffset.
Cómo: Crear zonas horarias sin reglas de ajuste
Describe cómo crear una zona horaria personalizada que no admita la transición a y desde el horario de verano.
Cómo crear zonas horarias con reglas de ajuste
Describe cómo crear una zona horaria personalizada que admita una o varias transiciones a y desde el horario de verano.
guardar y restaurar zonas horarias
Describe la compatibilidad de TimeZoneInfo con la serialización y deserialización de datos de zona horaria e ilustra algunos de los escenarios en los que se pueden utilizar estas funciones.
Cómo: Guardar zonas horarias en un recurso incrustado
Describe cómo crear una zona horaria personalizada y guardar su información en un archivo de recursos.
Cómo: Restaurar zonas horarias desde un recurso incrustado
Describe cómo crear instancias de zonas horarias personalizadas que se han guardado en un archivo de recursos incrustado.
Realizar operaciones aritméticas con fechas y horas
Describe los problemas relacionados con la adición, resta y comparación de los valores de DateTime y DateTimeOffset.
Cómo usar las zonas horarias en la aritmética de fechas y horas
Describe cómo realizar la aritmética de fecha y hora que refleja las reglas de ajuste de una zona horaria.
Conversión entre DateTime y DateTimeOffset
Describe cómo convertir entre valores de DateTime y DateTimeOffset.
hora de conversión entre zonas horarias
Describe cómo convertir horas de una zona horaria a otra.
Cómo resolver tiempos ambiguos
Describe cómo resolver una hora ambigua mediante su asignación a la hora estándar de la zona horaria.
Cómo permitir que los usuarios resuelvan tiempos ambiguos
Describe cómo permitir que un usuario determine la asignación entre una hora local ambigua y la hora universal coordinada.