Подтвердить что ты не робот

Формат даты и времени в формате SQL с использованием С#

Я пытаюсь сохранить текущий формат времени даты с С# и преобразовать его в формат даты SQL Server, например, yyyy-MM-dd HH:mm:ss, поэтому я могу использовать его для моего запроса Update.

Это был мой первый код:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");

Выход на дату одобрен, но время всегда "12:00:00", поэтому я изменил свой код на следующее:

string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " + 
myDateTime.TimeOfDay.ToString("HH:mm:ss");

Это дало мне ошибку компиляции "FormatException был необработанным" и предложил мне проанализировать. Поэтому я попытался сделать это с моим кодом в соответствии с моими исследованиями здесь, в staackoverflow:

string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " + 
myDateTime.Parse.TimeOfDay.ToString("HH:mm:ss");

или

string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " + 
myDateTime.tryParse.TimeOfDay.ToString("HH:mm:ss");

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

4b9b3361

Ответ 1

попробуйте это ниже

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");

Ответ 2

Использование стандартного формата datetime "s" также обеспечит совместимость с интернационализацией (MM/dd против dd/MM):

myDateTime.ToString("s");

=> 2013-12-31T00:00:00

Полные параметры: (код: результат выборки)

d: 6/15/2008 
D: Sunday, June 15, 2008 
f: Sunday, June 15, 2008 9:15 PM 
F: Sunday, June 15, 2008 9:15:07 PM 
g: 6/15/2008 9:15 PM 
G: 6/15/2008 9:15:07 PM 
m: June 15 
o: 2008-06-15T21:15:07.0000000 
R: Sun, 15 Jun 2008 21:15:07 GMT 
s: 2008-06-15T21:15:07 
t: 9:15 PM 
T: 9:15:07 PM 
u: 2008-06-15 21:15:07Z 
U: Monday, June 16, 2008 4:15:07 AM 
y: June, 2008 

'h:mm:ss.ff t': 9:15:07.00 P 
'd MMM yyyy': 15 Jun 2008 
'HH:mm:ss.f': 21:15:07.0 
'dd MMM HH:mm:ss': 15 Jun 21:15:07 
'\Mon\t\h\: M': Month: 6 
'HH:mm:ss.ffffzzz': 21:15:07.0000-07:00

Поддерживается в .NET Framework: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0
Ссылка: DateTime.ToString Способ

Ответ 3

Правильный ответ уже дал "параметры использования". Форматирование даты и передача ее в виде строки в SQL-Server может привести к ошибкам, поскольку это зависит от настроек, как дата интерпретируется на стороне сервера. В Европе мы пишем "1.12.2012", чтобы указать 1 декабря 2012 года, тогда как в других странах это можно рассматривать как 12 января.

При выдаче выписок непосредственно в SSMS я использую формат yyyymmdd, который выглядит довольно общим. Я не сталкивался с какими-либо проблемами на различных установках, над которыми я работал до сих пор.

Существует еще один редко используемый формат, который немного странный, но работает для всех версий:

select { d '2013-10-01' }

вернет первое октября 2013 года.

select { ts '2013-10-01 13:45:01' }

вернется 1 октября, 1:45:01

Я настоятельно рекомендую использовать параметры и никогда не форматировать свой собственный код SQL, вставляя вместе самодельные отформатированные фрагменты отчета. Это запись для SQL-инъекций и странных ошибок (форматирование значения float является еще одной потенциальной проблемой)

Ответ 4

Ваш первый код будет работать, сделав это

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); //Remove myDateTime.Date part 

Ответ 5

Ваша проблема заключается в свойстве "Дата", которое обрезает DateTime только по дате. Вы можете поместить преобразование следующим образом:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); // <- No Date.ToString()!

Ответ 6

Ответ, который я искал, был:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");

Я также узнал, что вы можете сделать это следующим образом:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString(myCountryDateFormat);

где myCountryDateFormat может быть изменен для удовлетворения изменений в зависимости от требований.

Обратите внимание, что тег "Этот вопрос может уже иметь ответ здесь:" на самом деле не ответил на этот вопрос, потому что, как вы видите, он использовал ".Date" вместо того, чтобы его пропускать. Это довольно запутанно для новых программистов .NET.

Ответ 7

Почему бы вообще не пропустить строку:

SqlDateTime myDateTime = DateTime.Now;

Ответ 8

только вы ставите "T" + DateTime.Now.ToLongTimeString() + '2015-02-23'

Ответ 9

Если вы хотите обновить таблицу с помощью этой даты, вы можете использовать свою строку sql, как в этом примере:

int fieldId;
DateTime myDateTime = DateTime.Now
string sql = string.Format(@"UPDATE TableName SET DateFieldName='{0}' WHERE FieldID={1}, myDateTime.ToString("yyyy-MM-dd HH:mm:ss"), fieldId.ToString());

Ответ 10

Ваша проблема заключается в свойстве Date, которое обрезает DateTime только по дате. Вы можете поместить преобразование следующим образом:

DateTime myDateTime = DateTime.Now;

string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");

Ответ 11

если вы хотите сохранить текущую дату в таблице, чтобы вы могли использовать

GETDATE();

или передать эту функцию как параметр

например. 'update tblname set curdate = GETDATE(), где colname = 123'