SQL Server 2005 противASP.net путаница в формате даты и времени

StackOverflow https://stackoverflow.com/questions/124066

Вопрос

Я нашел аналогичный вопрос о переполнении стека, но на самом деле он не ответил на мой вопрос.Мне нужно убедиться, что мое asp.net приложение форматирует дату дд / мм / гггг так же, как мой SQL Server 2005.

Как мне проверить, что культура дат (если это так называется) сервера соответствует тому, как я запрограммировал свое приложение?Существуют ли конкретные настройки базы данных и операционной системы?Зависит ли это от конкретной таблицы?Я не хочу переносить свои дни и месяцы.

Спасибо

Это было полезно?

Решение

Когда вы получаете DateTime из базы данных, оно должно быть в некультурном формате (например, объект DateTime, основанный на количестве тиков с определенной даты).Только когда вы преобразуете это значение в строку, вам нужно учитывать культуру.В таких случаях вы можете использовать yourDateTimeValue .toString("дд/ММ /гггг", CultureInfo.InvariantCulture), чтобы убедиться, что информация отображается правильно.

Другие советы

Я верю, что если вы используете SqlParameters, ADO.NET позаботится обо всем остальном, и вам не придется беспокоиться об этом.Кроме того, это также полезно для защиты от атак SQL-инъекций!:)

** Будьте осторожны, потому что столбцы SQL DateTime не имеют значения null и их минимальное значение равно 1/1/1753, в то время как .net DateTimes не имеют значения null с минимальными значениями 1/1/0001.**

Если вы извлекаете данные из реального столбца DateTime, по умолчанию они всегда будут в одном и том же стандартном формате.Для сохранения данных в столбце вы можете указать SqlDbType.DateTime в своем параметре.

я сорвал это с http://bytes.com/forum/thread767920.html :

com.Parameters.Add("@adate", SqlDbType.DateTime).Значение = DateTime.Now;

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

Пока вы сохраняете даты в приложении строго типизированными (переменные DateTime) и отправляете даты через подготовленные инструкции с DbParameter / SqlParameter, ваша база данных будет принимать их как есть.

Если вы используете строки для хранения ваших дат в коде, некоторые приведения гарантируют, что вы отправите правильные значения:

string sqlCmd = @"SELECT *
   FROM MyTable
   WHERE MyDateField = CONVERT(datetime, '{0}', 101)";

// assuming myDateString is a string with a date in the local format
sqlCmd = string.Format(sqlCmd,
    Convert.ToDateTime(myDateString).ToString("yyyyMMdd"));

(код уродливый, но, надеюсь, он передает суть)

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

В SQL Server 2008 есть некоторые типы данных, которые знают о часовых поясах, и если вы используете .NET 3.5, есть инструменты, помогающие с обработкой / преобразованиями часовых поясов.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top