У меня возникли некоторые проблемы, которые кажутся мне действительно странными, и я не могу начать осознавать, почему это происходит..NET DateTime Исключение для разбора партирования
В принципе, я пытаюсь сделать DateTime.ParseExact, который работает в одном случае, но не на другом.
Скажем, у меня есть эта строка в качестве строки даты:
"11/02/2015 11:59:06:313"
Если я анализирую, давая метод прямого указания строки, то есть следующий код, все работает отлично:
DateTime.ParseExact("11/02/2015 11:59:06:313", "dd/MM/yyyy HH:mm:ss:fff", null);
Теперь при размещении этого в качестве динамического значения (что я хочу) я получаю «Строка не распознается как допустимый формат DateTime», в этом коде:
DateTime.ParseExact(item.original, "dd/MM/yyyy HH:mm:ss:fff", null);
Я также попробовал метод Convert.ToDateTime (который выбросил же исключение):
Convert.ToDateTime(item.original).ToString("dd/MM/yyyy HH:mm:ss:fff");
«item.original» переменная приходит из класса (это строковое свойство этого класса, который определяется как
public class XmlData
{
public string tableName { get; set; }
public string columnName { get; set; }
public string original { get; set; }
public int required { get; set; }
public string status { get; set; }
public string type { get; set; }
public string newValue { get; set; }
}
Я действительно потерялся здесь. Имеет ли смысл, почему это происходит?
EDIT
Решил дать немного больше информации о том, как это используется, потому что, возможно, проблема возникает из-за дальнейшего.
У меня есть класс, который я использую для определения свойств, которые, используя отражение, будут создавать DataTable.
Класс обладает этим свойством:
public DateTime last_date { get; set; }
Затем я использую этот метод, чтобы построить DataTable:
public DataTable CreateEmptyDataTable(Type myType)
{
DataTable dt = new DataTable();
foreach (PropertyInfo info in myType.GetProperties())
{
dt.Columns.Add(new DataColumn(info.Name, info.PropertyType));
}
return dt;
}
После инициализации DataTable, я читаю значения из моего XMLDATA класса и используя следующий код для определения значения в столбце last_date следующим образом:
//Set the original state
foreach (XmlData item in collection)
{
if (item.tableName == "vehicle")
{
if (item.original == "--NULL--")
dr[item.columnName.Substring(item.tableName.Length + 1)] = DBNull.Value;
else
{
if (item.type == "DT") //DateTime in format "dd/MM/yyyy HH:mm:ss:fff"
dr[item.columnName.Substring(item.tableName.Length + 1)] = DateTime.ParseExact(item.original, "dd/MM/yyyy HH:mm:ss:FFF", null);
else
dr[item.columnName.Substring(item.tableName.Length + 1)] = Convert.ChangeType(item.original, dt.Columns[item.columnName.Substring(item.tableName.Length + 1)].DataType);
}
}
}
Вы заменили 'null' на' CultureInfo.InvariantCulture'? –
Строка, которую вы передали, не находится в формате ISO, поэтому ее интерпретировали как строку locat datetime. Я подозреваю, что ваш компьютер не использует этот длинный формат datetime. –
Последний подход делает что-то другое, он не использует формат для синтаксического анализа строки, но для преобразования (надеюсь, разобранного) 'DateTime' обратно в строку. –