如何在没有错误的情况下解析日期时间

How to parse datetime without error

我想从数据库中检索一些数据。但是,在尝试解析 DateTime

时出现错误
public static List<purchinvoice> retrieve_purchinvoice()
{
     List<purchinvoice> pilist = new List<purchinvoice>();
     SqlConnection con = new SqlConnection(DBconnection.connectstr);
     con.Open();
     SqlCommand com = new SqlCommand("retrieve_purch_invoice", con);
     com.CommandType = CommandType.StoredProcedure;
     SqlDataReader r = com.ExecuteReader();
     if (r.HasRows)
     {
         while (r.Read())
         {
             purchinvoice pi = new purchinvoice();
             pi.purch_serial_number = r[0].ToString();
             pi.p_date = DateTime.Parse(r[1].ToString());
             pi.sup_name = r[2].ToString();
             pilist.Add(pi);
         }
     }
     return pilist;
}

后面的代码是:

List<purchinvoice> pil = purchinvoice.retrieve_purchinvoice();
DataTable dt = new DataTable();
dt.Columns.Add("Serial Number");
dt.Columns.Add("Date");
dt.Columns.Add("Supplier Name");

foreach (purchinvoice pi in pil)
{
    DataRow dr = dt.NewRow();
    dr[0] = pi.purch_serial_number;
    dr[1] = string.Format("{0:D}", pi.p_date);
    dr[2] = pi.sup_name;
    dt.Rows.Add(dr);
}

GridView_purchinvoice.DataSource = new DataView(dt);
GridView_purchinvoice.DataBind();

您正在尝试以 String 格式插入日期时间。我强烈建议在 SQL 中使用 DateTime 数据类型。数据库本身支持它,您可以在没有 ParseToString.

的情况下阅读

或者,如果数据库不在您的控制之下,请尝试执行以下操作。

如下插入数据库

dr[1] = pi.p_date.ToString("o"); // ISO 8601 format

从数据库读取如下

pi.p_date = DateTime.Parse(r[1].ToString());

请注意,处理时区偏移可能存在风险。如果是您的情况,请检查 UTC 转换。

   DateTime.TryParse(r[1].ToString(), out pi.p_date);

要解析没有任何exception/error的DateTime字符串,您应该检查该字符串是否可以解析为DateTime对象。所以要做到这一点,你可以使用 DateTime.TryParse

DateTime myDateTime;
if(DateTime.TryParse(r[1].ToString(), out myDateTime))
{
   pi.p_date = myDateTime
} 

如果您的字符串是日期时间的特定格式,并且您想将其解析为 DateTime 对象,那么您可以使用 DateTime.TryParseExact,您可以在其中指定您想要的字符串格式解析。