我试图将用户插入的日期转换为特定的格式 yyyy / mm / dd要插入数据库中。
请注意,用户可以使用斜杠以格式插入日期 21/03/2015
我尝试使用ParseExact这样的方法:
DateTime Dfrom = DateTime.ParseExact(txtFrom.Text.Trim(),"yyyy/M/d",CultureInfo.InvariantCulture);
但每次我习惯在文本框中插入日期,例如: 21/03/2015
它给了我一个错误
字符串未被识别为有效的DateTime。
答案 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");