The solution:
The way to create a TimeOnly
or DateOnly
object representing the current time or date would be to use the FromDateTime
static method along with DateTime.Now
. So like:
TimeOnly now = TimeOnly.FromDateTime(DateTime.Now);
DateOnly today = DateOnly.FromDateTime(DateTime.Now);
If this is something you repeatedly need in your project, in order to avoid duplication, you could create extension methods on DateTime
to convert a DateTime
instance into TimeOnly
or 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);
}
}
Usage:
TimeOnly now = DateTime.Now.ToTimeOnly();
DateOnly today = DateTime.Now.ToDateOnly();
Note that this would be not only useful for getting the current date or time as TimeOnly
or DateOnly
, but for converting any instance of DateTime
into TimeOnly
or DateOnly
.
Another approach would be to have two static classes like the following:
public static class TimeOnlyHelpers
{
public static TimeOnly Now => TimeOnly.FromDateTime(DateTime.Now);
}
public static class DateOnlyHelpers
{
public static DateOnly Today => DateOnly.FromDateTime(DateTime.Now);
}
Usage:
TimeOnly now = TimeOnlyHelpers.Now;
DateOnly today = DateOnlyHelpers.Today;
Why isn't there a simple property on DateOnly
and TimeOnly
?
The rationale behind why no Now
or Today
properties were added to these structs was discussed here in this GitHub issue.
In short, they didn't want to bring in timezones and everything into DateOnly
and TimeOnly
since that would add extra complexity, so they decided against this, and kept the new structs simple and atomic.
There is some discussion however about whether a property like that could be added to a Clock
class (still a proposal, you can follow it here) so that the usage would be along the lines of TimeOnly now = SystemClock.Local.Now
, or for DateOnly
like DateOnly today = SystemClock.Local.Today
or something like that. But that's still undecided.
Now
in which timezone? Even the date isn't the same at any given moment -actually half the Earth is on a different date. That's why the new API requires you to be explicit β Verda