2015-08-24 2 views
0

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

foreach (DataRow row in table.Rows) 
{ 
    string gameName = row["GameName"].ToString(); 
    //DateTime releaseTime = (DateTime)row["ReleaseTime"]; 
    DateTime releaseTimeGB = DateTime.ParseExact("dd/mm/yyyy", row["ReleaseTime"].ToString(), new CultureInfo("en-GB")); 
    gameInfo.Add(new GameInfo() { Name = gameName, ReleaseTime = releaseTimeGB}); 
} 

Теперь закомментирован раздел в коде выше работает, но получает информацию DateTime в формате, который я не хочу, так что ошибка исходит от метода ParseExact(). Оглянувшись в Интернете, довольно очевидно, что точным источником ошибки является вызов метода ToString() на row["ReleaseTime"], но я не уверен, как исправить это, так как это мой первый раз с использованием SQLite.

+0

Каково значение и тип 'row [" ReleaseTime "]'? – DavidG

+0

@DavidG Это должно быть DateTime, поскольку это то, что я указал при выполнении SQL для создания строки, значение имеет значение «2015-09-01 00:00:00» для каждой строки –

ответ

0

Значение row["ReleaseTime"] уже DateTime объект, так что вам не нужно, чтобы преобразовать его в строку с ToString затем преобразовать его обратно в DateTime снова. Вместо того, чтобы бросить его прямо на DateTime:

DateTime releaseTimeGB = (DateTime)row["ReleaseTime"]; 

Или еще лучше, использовать расширение Field для DataRow:

DateTime releaseTimeGB = row.Field<DateTime>("ReleaseTime"); 
+0

Да, это то, что я изначально сделал, но проблема в том, что я хочу, чтобы он был установлен в формат даты в Великобритании, который равен dd/mm/yyyy, поэтому я использовал .ParseExact() для этого, но использование .ParseExact() означает, что мне нужно было преобразовать строку [ ReleaseTime "] к строке, которая была ошибкой, является –

+0

@CallumHoughton - у вас есть это в обратном порядке. Экземпляр 'DateTime' не заботится/не знает о том, в каком формате он будет отображаться. Только когда настало время поставить его на экран, укажите формат. – Igor

+0

@ Igor oh okay, так как бы преобразовать его в формат GB? –

-1

Если преобразовать его в ToString, то он принимает культуру определенный формат. Итак, если вы снова захотите преобразовать эту строку в DateTime, вы должны использовать этот формат для конкретной культуры. И я думаю, что для формата EN-GB нет dd/mm/yyyy. Это мм/дд/гггг.

+0

Nah для GB это должно быть dd/mm/yyyy, но затем даже заменить «new CultureInfo (« en-GB »)» на «CultureInfo.CurrentCulture» по-прежнему возвращает ту же ошибку. –

+1

, если вы хотите сохранить значение в виде строки, затем используйте siply string date = DateTime.ToString ("dd/MM/yyyy"); – harsh1802

+1

Попробуйте вот так: DateTime.ParseExact ("dd/mm/yyyy", строка ["ReleaseTime"]. ToString (dd/mm/yyyy), новая CultureInfo («en-GB»)); – harsh1802

Смежные вопросы