конвертировать VB даты сравнения в C # - PullRequest
1 голос
/ 24 августа 2011

У меня есть код в VB, и я пытаюсь преобразовать его в C #.

_nextContactDate.ToShortDateString > New Date(1900, 1, 1)

Это объявление _nexContractDate:

   Private _nextContactDate As DateTime

Это странно для меня. Comapre дата-время для строки?

Ответы [ 4 ]

7 голосов
/ 24 августа 2011

Этот код выполняет извлечение части даты (т.е. удаление части времени) и использование свободной природы VB, чтобы позволить дате, представленной в виде строки, неявно преобразовываться обратно в дату для сравнения с фактической датой..

Правильный способ удалить часть времени - проверить следующее:

_nextContactDate.Date > new DateTime(1900, 1, 1)

Это кажется странным, поскольку это означает, что 1 января 1900 года эта проверка не пройдена, и толькодаты со 2 января 1900 года пройдут.Поэтому я был бы склонен проверить, есть ли в этом коде логическая ошибка.

1 голос
/ 24 августа 2011

Я не уверен, что полностью понимаю ваш вопрос, но зачем вообще сравнивать DateTime с string, а не просто сравнивать даты?

if (_nextContactDate > new DateTime(1900, 1, 1))
{

}

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

0 голосов
/ 24 августа 2011

Во многих базах данных время хранится как минимальная дата + значение времени.

Таким образом, предполагая, что минимальная дата - 31 декабря 1899 года, 2359H (если я правильно укажу, это минимум для Access), тогда 1300H будет сохранено как 01 января 1900 года 1300H.
Даты хранятся как «обычные». И компоненты даты со временем имеют значение даты с прикрепленным к ним компонентом времени.

Какое отношение это имеет к коду? Оригинальный программист пытается определить, содержит ли поле значение даты или времени. Аналогия проста. Если значением является только время, то после удаления компонента времени вы получите 01 января 1900 года. Если оно содержит компонент даты, оно будет больше, чем 01 января 1900 года.

0 голосов
/ 24 августа 2011

нет, вам не нужно сравнивать переменную DataTime в строковом формате. Вы можете сравнить, как показано ниже:

DateTime myDate = new DateTime(2011,8,24);

if(myDate > DateTime.MinValue)
    DoSomething();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...