Вопрос по c# – Строка не была распознана как допустимый DateTime. Есть неизвестное слово, начинающееся с индекса 0

3

У меня есть следующий C #, который дает мне ошибку выше при попытке разобрать строку в datetime.

DateTime backupdate = System.Convert.ToDateTime(imageflowlabel.Text);   
DateTime currentdate = System.DateTime.Now.AddHours(-2);    
int result = currentdate.CompareTo(backupdate);

imageflowlable.text выглядит так2012-04-15 15:23:34:123

Любые идеи о том, как преобразовать это?

Спасибо

Вы пытались использовать DateTime.Parse или даже DateTime.ParseExact? zmbq
Разделитель по умолчанию для миллисекунд. в инвариантной культуре, а не:, Но обратите внимание на предложения использовать методы разбора вместоConvert.ToDateTime. Dan J

Ваш Ответ

5   ответов
4

Да - используйте & quot; DateTime.ParseExact () & quot; или & quot; TryParseExact () & quot; со строкой пользовательского формата:

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

DateTime currentdate;
int result;
try
{
  // EXAMPLE: 2012-04-15 15:23:34:123 
  DateTime backupdate =
     DateTime.ParseExact (
       "yyyy-MM-dd HH:mm:ss:fff", //mind the casing
       imageflowlabel.Text, 
       CultureInfo.InvariantCulture);
  currentdate = System.DateTime.Now.AddHours(-2);    
  result = currentdate.CompareTo(backupdate);
}
catch (Exception ex)
{
  ...
0

ParseExact должен работать для вас, предполагая, что ваши пользователи не имеют возможности самостоятельно редактировать это значение; в этом случае вы должны использоватьTryParseExact если вы не хотитеFormatException.

var toParse = "2012-04-15 15:23:34:123";

var parsed = DateTime.ParseExact(toParse, "yyyy-MM-dd HH:mm:ss:fff", null);

Assert.AreEqual(new DateTime(2012, 4, 15, 15, 23, 34, 123), parsed);
0

Ваш код выглядит правильно; проблема, вероятно, связана с вашим форматом строки, чей последний: на самом деле должен быть. (с указанием начала доли секунды).

Incorrect: 2012-04-15 15:23:34:123
Correct:   2012-04-15 15:23:34.123

Convert.ToDateTime("2012-04-15 15:23:34.123") работает отлично.

0

Я видел несколько ответов, чтобы разрешить ситуацию, описанную в этом вопросе, например использование DateTime.Parse, DateTime.ParseExact или Convert.ToDateTime. Я пытаюсь определить, почему проблема, по-видимому, противоречива. Я создал приложение с использованием Microsoft Enterprise Library Software Factory с бэкэндом SQL Server 2008 R2, и оно работает уже около 9 месяцев. Он имеет не менее 20 экземпляров с тем же форматом кода, которые присваивают значения свойств DateTime из C # параметрам System.Data.DBType.DateTime для хранимых процедур. 19 из 20 блоков кода работают нормально. 20-го числа мне пришлось добавить вызов .ToString (), как показано ниже, чтобы устранить ошибку, упомянутую в этом вопросе.

db.AddInParameter(command, "beginDT", DbType.DateTime, timeBlock.BeginDT.ToString());

Так что у кого-то есть понимание того, почему он будет работать нормально в 19 абсолютно одинаковых случаях, а не в 20-м? Я просто пытаюсь лучше понять взаимосвязь этих объектов, чтобы я мог создавать надежный код. С тех пор я вернулся ко всем остальным экземплярам и добавил вызов .ToString (). Тем не менее, я не прошел мое регрессионное тестирование; поэтому я не знаю, было ли это ошибкой.

4

Ваша проблема с частью времени вашей строки dateTime. Если ваша строка прочитана & quot; 2012-04-15 15: 23: 34.123 & quot; тогда это будет работать. Вы можете изменить вашу строку и заменить последний двоеточие точкой, и это исправит это.

Похожие вопросы