C #: Почему мой SqlDateTime.MinValue отличается на разных машинах? - PullRequest
5 голосов
/ 12 января 2010

Я только что обнаружил, что мой SqlDateTime.MinValue отличается на разных машинах.

Иногда это = DateTime (1953, 1, 1, 0, 0, 0);

но на других машинах это = DateTime (1753, 1, 1, 0, 0, 0);

Как это может быть? ОС на обеих машинах WinXP SP2.

Edit:

Мой код был такой:

DateTime date;

...

if (date == SqlDateTime.MinValue)
{
    return "(any)";
}
else
{
    return date.ToString();
} 

Этот код никогда не должен возвращаться 1 января 1753 года, но он возвращался (на некоторых машинах). Минуты и секунды даты не используются моим кодом и всегда должны оставаться значениями по умолчанию.

Ответы [ 4 ]

1 голос
/ 12 января 2010

Я знаю, что эта проблема возникала на старых компьютерах с Windows NT, где диапазон дат был 1953-XXXX, а не 1753-9999. Вы полностью уверены, что на этих машинах установлена ​​Windows XP?

0 голосов
/ 13 января 2010

При небольшом касании, но, поскольку вы используете SqlDateTime.MinValue в качестве специального значения, я бы предложил вместо этого использовать nullable DateTime следующим образом:

DateTime? date = null;
...
if (!date.HasValue)
{
    return "(any)";
}
else
{
    return date.Value.ToString();
} 

Обратите внимание, что сокращение для обнуляемого типа использует вопросительный знак: например, DateTime?

Как я уже сказал в своем комментарии, мне интересно, существует ли приведение к строке, из-за которого SqlDateTime.MinValue возвращает значение разницы, хотя на самом деле проблема заключается в форматировании строки (например, региональном настройки).

0 голосов
/ 12 января 2010

Как уже говорили, конструктор SqlDateTime static устанавливает год. Поэтому, если вы не вызываете другой конструктор, нет очевидного объяснения.

static SqlDateTime()
{
    ...
    MinYear = 1753;
    ...
}

Отражатель показывает как 0x6d9

0 голосов
/ 12 января 2010

Вы уверены, что правы в отношении различных значений? SqlDateTime - , задокументированный как имеющий фиксированную дату начала в MSDN для всех версий .NET Framework:

Минимальная действительная дата для структуры SqlDateTime - 1 января 1753 года.

Если это действительно воспроизводимо, похоже, что это будет ошибка в .NET Framework (или документация), поэтому Microsoft будет тем, кто обратится за помощью. Звонки в службу поддержки бесплатны, если обнаружена ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...