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

Все программы запускаются вызовами exec, несмотря на реализации ОС, давайте посмотрим, что стандарт POSIX говорит о exec функциях .

int execve (const char * path, char * const argv [], char * const envp []);

blockquote>

argv являются аргументами, передаваемыми программе, [ 116] являются переменными среды.

Каждый из массивов argv и environment заканчивается нулевым указателем. Нулевой указатель, завершающий массив argv, не учитывается в argc.

Аргумент argv является массивом символьных указателей на строки с нулевым символом в конце.

blockquote>

Итак, очень легко сделать вывод:

  1. Пустая (нулевая длина) строка может быть передана в argv
  2. NULL string can ' Если он не будет передан в argv, он прекратит работу argv и отбросит все последующие аргументы.
  3. любая строка в argv не может содержать символ \x0, \x0 завершит текущую строку параметров.

Объясните, что произошло при запуске

python -c 'print "\x30\x00\x31"' | xargs --null prog

Попробуйте:

python -c 'print "\x30\x00\x31"' | strace -f xargs --null echo

Мы можем найти:

...
...
...
read(0, "0\0001\n", 4096)               = 4
...
...
...
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f09f46d9850) = 21232
strace: Process 21232 attached
...
...
...
[pid 21232] execve("/bin/echo", ["echo", "0", "1\n"], 0x7ffe5ccd7638 /* 74 vars */ 

Это показывает, что xargs потенциально разделить аргумент, содержащий \x0, на два аргумента при вызове prog. Не выполняется оболочкой, не выполняется ОС, libc, но xargs

69
задан Joe Phillips 4 May 2009 в 19:48
поделиться

5 ответов

Если у вас уже есть объект DateTime и вы хотите заменить время на 23:59:59 для этой данной даты, то вы можете использовать Свойство .Date , чтобы получить дату со временем, установленным на 00:00:00, а затем добавить часы, минуты и секунды. Например:

var dt = yourDateInstance.Date.AddHours(23).AddMinutes(59).AddSeconds(59);

Если к последнему времени вы имеете в виду 23:59:59 PM, то это также должно работать:

var dt = new DateTime(Now.Year, Now.Month, Now.Day, 23, 59, 59);
94
ответ дан 24 November 2019 в 13:38
поделиться
DateTime startDate = DateTime.Today;
DateTime stopDate = startDate.AddDays(1).AddTicks(-1);

Как примечание, DateTime.Today возвращает (из MSDN)

System.DateTime, установленный на сегодняшнюю дату, с компонентом времени, установленным в 00:00:00.

Как уже отмечали другие, добавьте день, затем вычтите наименьший квант времени (отметку), и вы получите последнее возможное время для текущего дня.

Конечно, вы можете нужно думать о часовых поясах и тому подобном, в зависимости от того, где выполняется код, а не от того, где находится пользователь. Время UTC может быть хорошим, но это может отнять у вас день (в любом случае) в зависимости от того, где работает ваш код.

6
ответ дан 24 November 2019 в 13:38
поделиться

На ваш вопрос уже дан ответ, но ИМХО лучший способ - не пытаться вычитать отметку, секунду или что-либо еще из конца диапазона и сравнивать, используя строго меньше, чем

Так что, если вы хотите, чтобы все даты в диапазоне включительно варьировались от startDate до endDate, игнорируя время, вы могли бы использовать следующее в C #:

if ((myDate >= startDate.Date) && (myDate < endDate.Date.AddDays(1)))
{
    // ... it's in the range
}

или в T-SQL, предполагая, что ваш @ StartDate и @EndDate ровно в полночь, что-то вроде:

WHERE SomeDate >= @StartDate AND SomeDate < DATEADD(d,1,@EndDate)

UPDATE

Обновленный пример для отображения включающего диапазона в ответ на комментарии.

11
ответ дан 24 November 2019 в 13:38
поделиться
DateTime d = DateTime.Today.AddDays(1).AddTicks(-1);
19
ответ дан 24 November 2019 в 13:38
поделиться

Чтобы получить последний момент на сегодня:

DateTime d = new DateTime(Now.Year, Now.Month, Now.Day);
d = d.AddDays(1);
d = d.AddTicks(-1);

В ответ на ваши изменения я сделаю следующее:

DateTime start = new DateTime(Now.Year, Now.Month, Now.Day);
DateTime end = start.AddDays(1).AddTicks(-1);

// Or - just use end = start.AddDays(1), and use a < for comparison
73
ответ дан 24 November 2019 в 13:38
поделиться
Другие вопросы по тегам:

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