Как получить запуск и время окончания дня

Просто используйте NSNumber, и вы можете сделать:

@property (nonatomic, retain) NSNumber *movieId;
47
задан Cœur 15 January 2019 в 07:13
поделиться

4 ответа

Если вас беспокоит только точность .Net ...

startDate = DateTime.ParseExact(dates[0], "yyyyMMdd");
endDate = DateTime.ParseExact(dates[1], "yyyyMMdd").AddTicks(-1).AddDays(1);

Вам действительно не нужно объединять дополнительные значения в строку для временной части.


В качестве дополнения, если вы используете это для запроса, например, к базе данных ...

startDate = DateTime.ParseExact(dates[0], "yyyyMMdd");
endDate = DateTime.ParseExact(dates[1], "yyyyMMdd").AddDays(1);

С запросом ...

WHERE "startDate" >= @startDate AND "endDate" < @endDate

Тогда проблемы точности, отмеченные в комментариях, не будут иметь большого значения. endDate в этом случае будет не частью диапазона, а внешней границей.

18
ответ дан 7 November 2019 в 12:49
поделиться

Объект DateTime имеет свойство, называемое Date , которое возвращает только часть даты. (Время по умолчанию установлено на 12:00).

Я бы порекомендовал в качестве более элегантного решения (ИМХО), что если вы хотите разрешить любое datetime в последний день, тогда вы добавляете 1 день к дате и сравниваете, чтобы разрешить времена больше или равные дате начала, но строго меньше даты окончания (плюс 1 день).

// Calling code.  beginDateTime and endDateTime are already set.
// beginDateTime and endDateTime are inclusive.
// targetDateTime is the date you want to check.
beginDateTime = beginDateTime.Date;
endDateTime = endDateTime.Date.AddDays(1);

if ( beginDateTime <= targetDateTime &&
     targetDateTime < endDateTime )
   // Do something.
14
ответ дан 7 November 2019 в 12:49
поделиться

Вы можете определить два метода расширения где-нибудь в служебном классе, например:

public static DateTime EndOfDay(this DateTime date)
{
    return new DateTime(date.Year, date.Month, date.Day, 23, 59, 59, 999);
}

public static DateTime StartOfDay(this DateTime date)
{
    return new DateTime(date.Year, date.Month, date.Day, 0, 0, 0, 0);
}

И затем использовать их в таком коде:

public DoSomething()
{
    DateTime endOfThisDay = DateTime.Now.EndOfDay();
}
35
ответ дан 7 November 2019 в 12:49
поделиться

That's pretty much what I would do, with some small tweaks (really no big deal, just nitpicking):

  • The TryParse()/TryParseExact() methods should be used which return false instead of throwing exceptions.
  • FormatException is more specific than Exception
  • No need to check for Length == 8, because ParseExact()/TryParseExact() will do this
  • "00:00:00" and "23:59:59" are not needed
  • return true/false is you were able to parse, instead of throwing an exception (remember to check value returned from this method!)

Code:

private bool ValidateDatePeriod(string pdr, out DateTime startDate, 
                        out DateTime endDate)
{
   string[] dates = pdr.Split('-');

   if (dates.Length != 2)
   {
       return false;
   }

   // no need to check for Length == 8 because the following will do it anyway
   // no need for "00:00:00" or "23:59:59" either, I prefer AddDays(1)

   if(!DateTime.TryParseExact(dates[0], "yyyyMMdd", null, DateTimeStyles.None, out startDate))
      return false;

   if(!DateTime.TryParseExact(dates[1], "yyyyMMdd", null, DateTimeStyles.None, out endDate))
      return false;

   endDate = endDate.AddDays(1);
   return true;
}
4
ответ дан 7 November 2019 в 12:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: