将日期转换为仅yyyy-mm-dd

时间:2016-12-21 11:02:40

标签: c# sql-server date datetime

我试图将用户插入的日期转换为特定的格式 yyyy / mm / dd要插入数据库中。

请注意,用户可以使用斜杠以格式插入日期 21/03/2015

我尝试使用ParseExact这样的方法:

DateTime Dfrom = DateTime.ParseExact(txtFrom.Text.Trim(),"yyyy/M/d",CultureInfo.InvariantCulture);

但每次我习惯在文本框中插入日期,例如: 21/03/2015

它给了我一个错误

  

字符串未被识别为有效的DateTime。

4 个答案:

答案 0 :(得分:3)

当您将字符串解析为DateTime时,您没有指定希望它成为的格式,您指定当前的格式。

那是因为

a)DateTime不以特定格式存储日期,它使用类中日期的内部表示,而不关心格式。当您想要再次将其作为文本输出时,您只关心格式

b)你必须告诉Parse / ParseExact方法用户输入日期的格式,以便解析器能够理解它的阅读内容。

因此,请将您的代码更改为:

DateTime Dfrom = DateTime.ParseExact(txtFrom.Text.Trim(), "dd/MM/yyyy", CultureInfo.InvariantCulture);

如果您希望将来再次输出日期,请使用您提到的其他格式:

Dfrom.ToString("yyyy/MM/dd");

答案 1 :(得分:2)

您的输入文本格式如转换后的格式。例如: 如果你的输入“21/03/2015”那么

DateTime Dfrom = DateTime.ParseExact(txtFrom.Text.Trim(), "dd/MM/yyyy", CultureInfo.InvariantCulture);

或输入“2015/03/21”然后

DateTime Dfrom = DateTime.ParseExact(txtFrom.Text.Trim(), "yyyy/M/d", CultureInfo.InvariantCulture);

使用某些格式的最佳方式

 DateTime Dfrom = DateTime.ParseExact(txtFrom.Text.Trim(),
         new[] { "dd/MM/yyyy", "yyyy/M/d"/*, etc formats........ */ }
        , CultureInfo.InvariantCulture, DateTimeStyles.None);

答案 2 :(得分:0)

试试这个..

您输入了:2015年3月21日在文本框中

    DateTime Dfrom = DateTime.ParseExact(txtFrom.Text.Trim(),"dd/MM/yyyy",CultureInfo.InvariantCulture);

Dfrom.ToString("yyyy/MM/dd");

答案 3 :(得分:0)

您可以使用TryParseExact检查用户是否以valid date格式输入dd/MM/yyyy。如果日期为not parsed,您可以检查其他格式MM/dd/yyyy并解析它。

string date = "21/03/2015";
DateTime dt;
if (!DateTime.TryParseExact(date, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
   DateTime.TryParseExact(date, "MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);
string resultDate = dt.ToString("yyyy-MM-dd");