【问题标题】:C# conversion of date from string to date format [closed]C#将日期从字符串转换为日期格式[关闭]
【发布时间】:2023-03-11 03:25:01
【问题描述】:

我对 DateTime.ParseExtract 有疑问。错误是String was not recognized as a valid DateTime

sqlserver 2012中的trialDate被定义为follow type=date,并以此格式显示 月/日/年。我猜这是 sqlserver 的默认设置。我不知道如何以及在哪里将其更改为 dd/MM/yyyy 或 dd-MM-yyyy。

当我在列表视图中显示日期时,我这样做了(戴上面具): '

这是 C# 代码隐藏

    string sTrialDate = "";
    foreach (ListViewDataItem item in ListView1.Items)
    {
       CheckBox MyCheckBox = (CheckBox)item.FindControl("MyCheckBox");
       if (MyCheckBox.Checked) 

       {
           Label myTrialDate = (Label)item.FindControl("trialDatelbl");
           sTrialDate = myTrialDate.Text;
       }
    }

问题是 DATETIME.ParseExtract,这是我目前尝试的:

   DateTime dt = DateTime.ParseExact("sTrialDate", "MM/dd/yyyy",   
           System.Globalization.CultureInfo.InvariantCulture);    <=== not working

   DateTime dt = DateTime.ParseExact("sTrialDate", "dd/MM/yyyy",   
           System.Globalization.CultureInfo.InvariantCulture);    <=== not working

   DateTime dt = DateTime.ParseExact("sTrialDate", "dd/MM/yyyy ",   
           System.Globalization.CultureInfo.InvariantCulture);    <=== not working

   DateTime dt = DateTime.ParseExact(Request.QueryString["sTrialDate"], "dd/MM/yyyy", null);              
                                                                                <==not working

【问题讨论】:

  • "sDateRdv" 在我看来不像是约会对象。
  • 我改了,抱歉应该是sTrialDate
  • "sTrialDate" 看起来也不像是约会!
  • 投票结束,因为这是一个简单的错字,使用字符串文字而不是变量名。

标签: c# sql sql-server date datetime


【解决方案1】:

您似乎误用了ParseExact。你正在做:

ParseExact("sDateRdv", "MM/dd/yyyy")

试图将字符串 sDateRdv 解析为日期并且显然失败了。如果sDateRdv 是一个包含您的日期的变量,那么您应该使用:

ParseExact(sDateRdv, "MM/dd/yyyy")

在您的最后一个示例中,您应该检查Request.QueryString["sTrialDate"] 的值是什么。它是一个有效的日期字符串吗?

最后,您将讨论 sqlserver 中的日期以及如何更改其表示形式。答案是你真的没有。日期是一个日期,与它的显示方式无关。当您查看它时,它将被转换为人类可读的字符串(因为这就是我们阅读的全部内容),但这并不代表它是如何存储的。您会一直将其视为日期(因此将其从数据库中以 DateTime 的形式获取到您的 C# 代码中),并且您只会将其转换为字符串以供显示或进行某种序列化(例如 XML)。

【讨论】:

  • same error String 未被识别为有效的 DateTime with DateTime dt2 = DateTime.ParseExact(sTrialDate, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);或 DateTime dt2 = DateTime.ParseExact(sTrialDate, "MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture);字符串的格式为 dd-MM-YYYY
  • 如果字符串的格式是dd-MM-YYYY 那么为什么不把你的日期格式改成那样呢?如果您提供的格式和字符串的格式不同,那么当然会出现错误。我不太确定你在这里问什么......
  • 由于我的数据库格式是 DATE 类型,我们是否可以选择将 DATETIME 更改为 DATE ? C# 中似乎没有 DATE 格式。如果我想与没有时间的 SQL 的 DATE 格式进行比较,我想我将不得不放弃 TIME ?
  • @user3127986, No. Per SQL Server Data Type Mappings, date, datetime, datetime2, 和 smalldatetime 数据库列类型都映射到 DateTime .Net Framework 中的类型跨度>
  • 如果你在 SQL 中有一个日期(没有时间),那么在 C# 中它将变成一个日期时间,时间设置为00:00。如果您想将此与有时间的东西进行比较,那么只需使用DateTimeDate 属性。例如PureDate==DateWithTime.Date。我不确定这是否与您的问题有关?
【解决方案2】:

除了你不应该在引号中传递你的变量:

   DateTime dt = DateTime.ParseExact(sDateRdv, "MM/dd/yyyy",   
           System.Globalization.CultureInfo.InvariantCulture); 

   DateTime dt = DateTime.ParseExact(sDateRdv, "dd/MM/yyyy",   
           System.Globalization.CultureInfo.InvariantCulture); 

   DateTime dt = DateTime.ParseExact(sDateRdv, "dd/MM/yyyy ",   
           System.Globalization.CultureInfo.InvariantCulture);

你也可以试试这个:

DateTimeFormatInfo dtfi = new DateTimeFormatInfo();
dtfi.ShortDatePattern = "dd-MM-yyyy";
DateTime objDate = Convert.ToDateTime(someStringWithDate, dtfi)

【讨论】:

    猜你喜欢
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 2020-05-24
    相关资源
    最近更新 更多