Steve Fenton

Stripping Times from Dates in C#

This is a surprisingly common problem in C#, where you need to take a DateTime and strip off the “time” bit to leave you with a representation of a day. Currently, you can do it by creating a new DateTime and passing only the parts you want to keep, like year, month, and day.

DateTime expiryDateOnly =
    new DateTime(expiryDate.Year, expiryDate.Month, expiryDate.Day);

.NET 5

The solution in .NET 5 is to use the Date property of the DateTime object. This also returns a DateTime, like the original solution, but it has the time stripped.

DateTime expiryDateOnly =
    expiryDate.Date;

Thank you Data Elemental for this solution.

.NET 6

In .NET 6 we get an upgraded solution with some built in types. To solve our current case, we can use the DateOnly type, and there is an equivalent TimeOnly type too.

DateOnly expiryDateOnly =
    DateOnly.FromDateTime(expiryDate);

These new types offer a similar benefit to typed identities (i.e. having a ProductId rather than an int). If you require a date-only date, you can’t be accidentally passed a date with a time.

I’m looking forward to updating my date code to remove all the manual mapping to date-only dates!

Written by Steve Fenton on