gpt4 book ai didi

c# - 日期时间格式到 YYYY-mm-dd 转换 c# asp.net

转载 作者:行者123 更新时间:2023-11-29 08:20:00 31 4
gpt4 key购买 nike

我在 asp.net c# 中的日期转换时遇到问题。我的 GeneralMethods 类中有以下方法

public DateTime mySqlDateFormate(string dateString, string format="g")
{
dateString = isOk(dateString) ? dateString : DateTime.Now.Year + "-" + DateTime.Now.Month + "-" + DateTime.Now.Day;
CultureInfo provider = CultureInfo.InvariantCulture;
// Parse date-only value with invariant culture.
try
{
result = DateTime.ParseExact(dateString, format, provider);
//Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (Exception exc)
{
catchError(exc);
}
return result;
}

我将参数从页面发送到此方法,如下所示:

protected void Page_Load(object sender, EventArgs e)
{
if(gm.isOk((string)Session["userid"])){
var sqlAry = "SELECT sno,std_name,gender,nic,father_name,father_nic,guardian_name,guardian_nic,dob,domicile,addres,reg_date,last_institute FROM std_basic_info WHERE sno = " + (string)Session["std_sno"];
DataTable data = gm.dataTable(sqlAry);
foreach (DataRow row in data.Rows)
{
snoTbl = row["sno"].ToString();
std_nameTbl = row["std_name"].ToString();
genderTbl = row["gender"].ToString();
nicTbl = row["nic"].ToString();
father_nameTbl = row["father_name"].ToString();
father_nicTbl = row["father_nic"].ToString();
guardian_nameTbl = row["guardian_name"].ToString();
guardian_nicTbl = row["guardian_nic"].ToString();
dobTbl = row["dob"].ToString();
domicileTbl = row["domicile"].ToString();
addresTbl = row["addres"].ToString();
reg_dateTbl = row["reg_date"].ToString();
institutionLstAttendedTbl = row["last_institute"].ToString();
}
this.std_sno.Value = snoTbl;
this.stdName.Text = std_nameTbl;
if (genderTbl.Equals("1")) { this.sex.SelectedIndex = 0; } else { this.sex.SelectedIndex = 1; }
this.stdNic.Text = nicTbl;
this.fatherName.Text = father_nameTbl;
this.fatherNic.Text = father_nicTbl;
this.guardianName.Text = guardian_nameTbl;
this.guardianNic.Text = guardian_nicTbl;
this.dob.Text = gm.mySqlDateFormate(dobTbl,"d").ToString();
this.domicile.Text = domicileTbl;
this.institutionLstAttended.Text = institutionLstAttendedTbl;
this.address.Text = addresTbl;
}
}

在 mySql 表中,dob 列的值如下:

1978-04-23

一切都很顺利,但是当它从表中获取值时,它显示如下:

1/1/0001 12:00:00 AM

我没有在文本字段中获取原始值?

请任何人帮助我......

谢谢

最佳答案

您的代码中存在多种反模式。让我们一一看看。

  • 不必要的字符串转换

    dobTbl = row["dob"].ToString();

    您不应该对来自数据库的每个值调用.ToString()。这会立即丢弃可能存在的任何类型信息,并迫使您不必要地进行字符串格式化和解析。相反,您应该转换为返回的实际数据类型:

    dobTbl = (DateTime) row["dob"];

    这同样适用于所有其他列。转换为 (string)(int) 或任何实际数据类型。

  • 使用数据表

    DataTable data = gm.dataTable(sqlAry);

    当您使用DataTable 类时,您会将查询中的所有 记录加载到内存中。如果您有一个很大的数据集,那么速度可能会很慢并且会消耗大量内存。相反,您应该考虑使用 DataReader,它一次只处理一行数据。

    我有点困惑为什么你要开始处理多行,因为看起来你只是使用文本框中结果的最后一行。如果查询返回多条记录,则第 1 行到第 n-1 行的数据将被丢弃。

  • 多次调用系统时钟

    DateTime.Now.Year + "-" + DateTime.Now.Month + "-" + DateTime.Now.Day

    每次调用 DateTime.Now 时,这都是一次从系统时钟检索时间的新调用。通过在同一过程中多次调用它,如果您的代码碰巧运行超过一天边界并且时间恰到好处,则您可能会面临获得无效数据的风险。此外,这是没有必要的。只需调用一次并将结果放入局部变量中:

    DateTime now = DateTime.Now;

    然后您就可以在任何需要的地方使用now

  • 从各个部分组成日期时间

    如果您希望将当前日期作为字符串,请不要将其分段组装。只需使用:

    DateTime.Today.ToString("yyyy-MM-dd");
  • 根据框架工作

    您的整个 mySqlDateFormate 函数可以替换为 DateTime.TryParseExact,并且更加可靠。

  • SQL 字符串连接

    ... " WHERE sno = " + (string)Session["std_sno"];

    这会使您的代码容易受到 SQL 注入(inject)攻击,并且还会阻止 SQL 查询引擎正确缓存查询的执行计划。您应该改用参数化查询。 StackOverflow 和整个网络上有大量关于此问题的信息,因此我在此不再赘述。

关于c# - 日期时间格式到 YYYY-mm-dd 转换 c# asp.net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19664172/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com