如何在没有错误的情况下解析日期时间
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
数据类型。数据库本身支持它,您可以在没有 Parse
或 ToString
.
的情况下阅读
或者,如果数据库不在您的控制之下,请尝试执行以下操作。
如下插入数据库
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,您可以在其中指定您想要的字符串格式解析。
我想从数据库中检索一些数据。但是,在尝试解析 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
数据类型。数据库本身支持它,您可以在没有 Parse
或 ToString
.
或者,如果数据库不在您的控制之下,请尝试执行以下操作。
如下插入数据库
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,您可以在其中指定您想要的字符串格式解析。