Преобразование даты в строку для файла журнала, а затем из строки в DateTime для базы данных - PullRequest
1 голос
/ 13 февраля 2012

Если я сохраню дату и время в этом формате:

string sLogTime = "MMM ddd d HH:mm yyyy";

... что мне тогда нужно сделать, чтобы преобразовать эту строку в распознаваемое значение для столбца SQL Server DateTime? Примерно так:

   DateTime dtLogTime = Convert.ToDateTime(sLogTime);
   . . .
   cmd.Parameters.Add(new SqlParameter("@logDateTime", dtLogTime)); 
   . . .

Ответы [ 4 ]

2 голосов
/ 13 февраля 2012

Как уже говорили другие, используйте DateTime.ParseExact или DateTime.TryParseExact, возможно, с инвариантной культурой.Однако вы также должны знать, в каком часовом поясе находится журнал. Используйте DateTimeStyles.AssumeUniversal или DateTimeStyles.AssumeLocal, соответственно, или, возможно, ни один из них.Фундаментально, DateTime немного обманчив, и вы можете легко сделать неправильную вещь.Вы, вероятно, должны убедиться, что DateTime, который вы передаете в свою базу данных, находится в UTC.

Альтернативой для синтаксического анализа является использование Noda Time , что обеспечивает немного большую ясность (IMO) о том, как вы анализируете и т. д. Затем вы можете преобразовать в соответствующий DateTime для передачи в вашу базу данных.

2 голосов
/ 13 февраля 2012

Вы можете использовать точный анализ:

DateTime dtLogTime = DateTime.ParseExact(sLogTime, "MMM ddd d HH:mm yyyy", CultureInfo.CurrentCulture);

Просто убедитесь, что вы используете согласованную информацию о культуре как для чтения, так и для письма.Люди часто используют CultureInfo.InvariantCulture для внутренних форматов, которые пользователь никогда не видит, которые являются английскими, но не специфичными для страны.

1 голос
/ 13 февраля 2012
DateTime dt;
string Temp1 = "Your Date";
if (DateTime.TryParse(Temp1, out dt))
{
     cmd.Parameters.Add(new SqlParameter("@logDateTime", dt)); 
}
else
     cmd.Parameters.Add(new SqlParameter("@logDateTime", DateTime.Now)); 
1 голос
/ 13 февраля 2012

Попробуйте использовать ParseExact или TryParseExact:

string pattern = "MMM ddd d HH:mm yyyy";
DateTime parsedDate;
DateTime.TryParseExact(dateValue, pattern, null, DateTimeStyles.None, out parsedDate);
...