In my C# app, I pass a string variable that is of format yyyymmdd-yyyymmdd that represents a from and to date. I want to get the start and end times for these dates respectively. Currently I have the below code but was wondering if there was more of an elegant solution?
So for pdr = 20090521-20090523 would get "20090521 00:00:00" and "20090523 23:59:59"
private void ValidateDatePeriod(string pdr, out DateTime startDate, out DateTime endDate) { string[] dates = pdr.Split('-'); if (dates.Length != 2) { throw new Exception("Date period is of incorrect format"); } if (dates[0].Length != 8 || dates[1].Length != 8) { throw new Exception("Split date periods are of incorrect format"); } startDate = DateTime.ParseExact(dates[0] + " 00:00:00", "yyyyMMdd HH:mm:ss", null); endDate = DateTime.ParseExact(dates[1] + "23:59:59", "yyyyMMdd HH::mm:ss", null); }
ZonedDateTime zdtStart = zdt. toLocalDate(). atStartOfDay( zoneId ); Using Half-Open approach, get first moment of following day.
Use the setUTCHours() method to get the start and end of the day, e.g. startOfDay. setUTCHours(0, 0, 0, 0) . The method takes the hours, minutes, seconds and milliseconds as parameters and sets them for the specified date according to universal time.
I am surprised to see how an incorrect answer received so many upvotes:
The correct version would be as follows:
public static DateTime StartOfDay(this DateTime theDate) { return theDate.Date; } public static DateTime EndOfDay(this DateTime theDate) { return theDate.Date.AddDays(1).AddTicks(-1); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With