字符串未被识别为有效的DateTime - 什么是错的?

时间:2013-06-10 14:35:11

标签: c# linq date-format formatexception

我得到了一个恼人的小错误,并且不能为我的生活弄清楚为什么它是原因。我有一个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 个答案:

答案 0 :(得分:1)

因为17/02/2012不是有效日期,02/17/2012是。mm/dd/yyyy。日期将被解析为dd。一种选择是使用DateTime.ParseExact来解析日期,var startDate = DateTime.ParseExact("17/02/2012", "dd/MM/yyyy", null); 作为第一组数字。 e.g。

{{1}}

答案 1 :(得分:0)

调试器将向您显示nm.Element("Payperiod_EndDate").ToString()为您提供包含该元素的xml标记的字符串。请尝试以下方法:

startDate = DateTime.ParseExact(nm.Element("Payperiod_EndDate").Value, "dd/MM/yyyy", null)