• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

183
Views
¿DateTime.Now equivalente para TimeOnly y DateOnly?

.NET 6/C# 10 introdujo estructuras TimeOnly y DateOnly , para representar solo una hora y solo una fecha respectivamente.

La buena y antigua estructura DateTime siempre tenía una propiedad estática Now que le daría la fecha y la hora actuales.

Esperaba que las estructuras TimeOnly y DateOnly tuvieran propiedades estáticas similares; como TimeOnly.Now o DateOnly.Today , pero aparentemente no lo hacen.

Entonces, ¿qué debo hacer si quiero un objeto DateOnly que represente la fecha actual o un objeto TimeOnly que represente la hora actual?

Y también me gustaría saber POR QUÉ decidieron no incluir propiedades como esa en estas dos nuevas estructuras.

over 3 years ago · Santiago Trujillo
4 answers
Answer question

0

¿Qué hay de llamar a .FromDateTime() :

 var date = DateOnly.FromDateTime(DateTime.UtcNow); var time = TimeOnly.FromDateTime(DateTime.UtcNow);

Detalles en la documentación para DateOnly y TimeOnly .

over 3 years ago · Santiago Trujillo Report

0

Puede usar el método .FromDateTime() ,

Para obtener la fecha actual solamente:

 var dateNow = DateOnly.FromDateTime(DateTime.Now);

Para obtener la hora actual solamente:

 var timeNow = TimeOnly.FromDateTime(DateTime.Now);

Para obtener más detalles, puede consultar el problema de Github . Hay varios buenos comentarios que explican por qué la propiedad .Now no se introduce en DateOnly y TimeOnly

¿Por qué las propiedades .Today , .Now y UtcNow no se introducen en DateOnly ?

  • Del comentario de @tarekgh , la comunidad dotnet está tratando de mantener DateOnly no relacionado con las zonas horarias

El siguiente comentario de @tarekgh , explicó una mayor complejidad si introducen estas propiedades en DateOnly .


Después de leer el hilo de github y un par de otras documentaciones, siento que presentar las estructuras DateOnly y TimeOnly es solo para desacoplar DateTime .

Este desacoplamiento de fecha y hora nos ayudará en el futuro a realizar cálculos individuales en Date y Time por separado.

Esto nos ayudará a diseñar nuestras clases modelo con precisión y a nivel granular.

over 3 years ago · Santiago Trujillo Report

0

Para obtener el objeto DateOnly que representa la fecha actual, puede usar:

 var currentDate = DateOnly.FromDateTime(DateTime.Now);

De manera similar, para obtener el objeto TimeOnly que representa la fecha actual, puede usar:

 var currentTime = TimeOnly.FromDateTime(DateTime.Now);

El razonamiento detrás de no incluir la propiedad .Now se analiza en detalle aquí: https://github.com/dotnet/runtime/issues/53498

over 3 years ago · Santiago Trujillo Report

0

La solución:

La forma de crear un objeto TimeOnly o DateOnly que represente la fecha o la hora actual sería usar el método estático FromDateTime junto con DateTime.Now . Asi como:

 TimeOnly now = TimeOnly.FromDateTime(DateTime.Now); DateOnly today = DateOnly.FromDateTime(DateTime.Now);

Si esto es algo que necesita repetidamente en su proyecto, para evitar la duplicación, puede crear métodos de extensión en DateTime para convertir una instancia de DateTime en TimeOnly o DateOnly :

 public static class DateTimeExtensions { public static TimeOnly ToTimeOnly(this DateTime dateTime) { return TimeOnly.FromDateTime(dateTime); } public static DateOnly ToDateOnly(this DateTime dateTime) { return DateOnly.FromDateTime(dateTime); } }

Uso:

 TimeOnly now = DateTime.Now.ToTimeOnly(); DateOnly today = DateTime.Now.ToDateOnly();

Tenga en cuenta que esto no solo sería útil para obtener la fecha o la hora actual como TimeOnly o DateOnly , sino también para convertir cualquier instancia de DateTime en TimeOnly o DateOnly .

Otro enfoque sería tener dos clases estáticas como las siguientes:

 public static class TimeOnlyHelpers { public static TimeOnly Now => TimeOnly.FromDateTime(DateTime.Now); } public static class DateOnlyHelpers { public static DateOnly Today => DateOnly.FromDateTime(DateTime.Now); }

Uso:

 TimeOnly now = TimeOnlyHelpers.Now; DateOnly today = DateOnlyHelpers.Today;

¿Por qué no hay una propiedad simple en DateOnly y TimeOnly ?

La razón por la que no se agregaron propiedades Now o Today a estas estructuras se analizó aquí en esta edición de GitHub .

En resumen, no querían incluir zonas horarias y todo en DateOnly y TimeOnly ya que eso agregaría una complejidad adicional, por lo que decidieron no hacerlo y mantuvieron las nuevas estructuras simples y explícitas.

Sin embargo, existe cierta discusión sobre si una propiedad como esa podría agregarse a una clase Clock (todavía es una propuesta, puede seguirla aquí ) para que el uso sea similar a TimeOnly now = SystemClock.Local.Now , o para DateOnly como DateOnly today = SystemClock.Local.Today o algo así. Pero eso aún está indeciso.

over 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error