Строка не была распознана как действительный DateTime. Что не так?
Я получаю досадную ошибку и не могу понять, почему это происходит. У меня есть XML-файл, где я храню данные, как показано ниже.
- <EmployeeFinance>
<EmployeeEmploy_Id>5584</EmployeeEmploy_Id>
<EmpPersonal_Id>30358</EmpPersonal_Id>
<No_DaysWorked>30</No_DaysWorked>
<Date_Appointment>17/02/2012</Date_Appointment>
<Date_Employment>02/05/1984</Date_Employment>
<Date_Termination>01/01/0001</Date_Termination>
<Payperiod_StartDate>01/01/2013</Payperiod_StartDate>
<Payperiod_EndDate>31/01/2013</Payperiod_EndDate>
<BatchNumber>38</BatchNumber>
<PAYE_ToDate_Computed>0</PAYE_ToDate_Computed>
<Income_Tax_RateID>0</Income_Tax_RateID>
<NIS_RateID>0</NIS_RateID>
<NIS_weeks_worked>0</NIS_weeks_worked>
</EmployeeFinance>
Если вы посмотрите на узлы даты, Payperiod_StartDate,Payperiod_EndDate, Date_Appointment и т. Д. Все они имеют одинаковый формат. Теперь в моем коде C#, когда я пишу свой запрос для выбора из файла XML, я получаю, что строка не была распознана как допустимая ошибка DateTime. Когда я закомментирую все остальные даты и оставлю start_date, это работает. Они в одном формате, я не вижу, что я делаю неправильно. Пожалуйста, помогите мне.
var context = new SSPModel.sspEntities();
XElement xelement = XElement.Load(GlobalClass.GlobalUrl);
XDocument doc = XDocument.Load(GlobalClass.GlobalUrl);
var query = from nm in xelement.Elements("EmployeeFinance")
select new EmployeeEmploy
{
Employee_Personal_InfoEmp_id = (int)nm.Element("EmpPersonal_Id"),
Substantive_designation = (int)nm.Element("Position_Id"),
Grade_Id = (int)nm.Element("Grade_Id"),
PositionTotal_PtBasic = (double)nm.Element("Sum_AllPosition"),//part of basic
GradeTotal_PtBasic = (double)nm.Element("Sum_AllGrade"), //part of basic
Housing_Allowance = (double)nm.Element("Housing"),
Base_Pay = (double)nm.Element("Base_Pay"),
startDate = (DateTime)nm.Element("Payperiod_StartDate"),
endDate = (DateTime)nm.Element("Payperiod_EndDate"),
Date_of_Appointment = (DateTime)nm.Element("Date_Appointment"),
Date_of_Employment = (DateTime)nm.Element("Date_Employment"),
Termination_date_actual = (DateTime)nm.Element("Date_Termination"),
Base_Pay_Currency = (string)nm.Element("Currency"),
Exchange_rate = (double)nm.Element("Exchange_Rate")
};
var x = query.ToList();
foreach (var xy in x) {
Debug.WriteLine(xy.endDate);
}
2 ответа
Так как 17/02/2012
не является действительной датой, однако, 02/17/2012
является. Дата будет проанализирована как mm/dd/yyyy
, Одним из вариантов является использование DateTime.ParseExact для анализа даты с dd
в качестве первого набора чисел. например
var startDate = DateTime.ParseExact("17/02/2012", "dd/MM/yyyy", null);
Отладчик покажет вам, что nm.Element("Payperiod_EndDate").ToString()
выдает строку, содержащую теги xml для этого элемента. Вместо этого попробуйте следующее:
startDate = DateTime.ParseExact(nm.Element("Payperiod_EndDate").Value, "dd/MM/yyyy", null)