Ответ 1
попробуйте это ниже
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
Я пытаюсь сохранить текущий формат времени даты с С# и преобразовать его в формат даты 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");
но это дает мне метод, который недействителен для данного контекста. Я попытался найти решения для своей проблемы и в настоящее время застрял в течение двух часов. Я все еще немного новичок в С#, вы можете помочь?
попробуйте это ниже
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
Использование стандартного формата 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
Способ
Правильный ответ уже дал "параметры использования". Форматирование даты и передача ее в виде строки в 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 является еще одной потенциальной проблемой)
Ваш первый код будет работать, сделав это
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); //Remove myDateTime.Date part
Ваша проблема заключается в свойстве "Дата", которое обрезает DateTime
только по дате.
Вы можете поместить преобразование следующим образом:
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); // <- No Date.ToString()!
Ответ, который я искал, был:
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.
Почему бы вообще не пропустить строку:
SqlDateTime myDateTime = DateTime.Now;
только вы ставите "T" + DateTime.Now.ToLongTimeString() + '2015-02-23'
Если вы хотите обновить таблицу с помощью этой даты, вы можете использовать свою строку 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());
Ваша проблема заключается в свойстве Date
, которое обрезает DateTime
только по дате. Вы можете поместить преобразование следующим образом:
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");
если вы хотите сохранить текущую дату в таблице, чтобы вы могли использовать
GETDATE();
или передать эту функцию как параметр
например. 'update tblname set curdate = GETDATE(), где colname = 123'