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