Используйте стандартный, однозначный, не зависящий от языка и региональных настроек формат.Если вы должны использовать строку, передайте в следующем формате (который, я знаю, вы можете достичь в .NET с .ToString()
):
YYYY-MM-DDTHH:MM:SS
Например:
Console.WriteLine(DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss"));
Причина этого предпочтительна в том, что не имеет значения, где выполняется ваш код, какие изменения вносятся в базовую операционную систему или какие изменения вносятся на стороне SQL Server, дата всегда будет правильной и не будет неверно истолкована.С указанным выше форматом вам никогда не придется беспокоиться, если он будет неверно истолкован по любой из множества причин, по которым это может произойти (настройки сеанса, такие как LANGUAGE
и DATEFORMAT
, региональные настройки, локаль, даже ваш собственный код, могут делать предположенияо формате входящей строки).Существует только пара действительно безопасных форматов для SQL Server, и mm/dd/yyyy
и dd/mm/yyyy
абсолютно не входят в их число.
Теперь я не уверен, почему вы используете строку в первую очередь.Наилучшая практика предполагает, что вы должны передавать параметр datetime из C #, а не строковый литерал.Нет причин конвертировать его в строку.Многие люди позволяют пользователям вводить даты вручную в текстовое поле и просто передавать то, что они вводят.Не делайте этого - заставляйте их выбирать из элемента управления календаря или набора раскрывающихся списков и строить из этого значение даты и времени.Если вы позволяете пользователям вводить даты, вы никогда не сможете быть уверены, что 09/07/2013
одного человека, на самом деле, 07/09/2013
.
другого человека. Все, что сказано, если вы просто хотите ввести текущее время, этоможет быть гораздо менее проблематичным просто позволить SQL Server предоставить значение, так как у него тоже есть эта возможность.Так, например, если вы храните эти данные в столбце для новой вставляемой строки, установите столбец следующим образом:
ModifiedDate DATETIME NOT NULL DEFAULT GETUTCDATE()
Теперь вам не нужно передавать этот параметр из .NET или дажеупомяните имя столбца в вашей выписке INSERT
.