将日期从MM / dd / YYYY格式转换为dd / MM / YYYY格式

我正面临一个小问题,我在尝试这么多事情之后无法做到这一点,所以在这里……我的页面中有一个文本框,我在其中输入日期,我想在datetime对象中使用该日期。

例如:输入日期:11/2/2010(dd / MM / yyyy)当我在日期时间对象中访问它时,它应该采用相同的格式,但它将被更改为(2/11/2011即:MM / dd / yyyy格式)。

我希望我在这里有意义我想要的是这样的事情……

DateTime dt = convert.ToDateTime(txtDate.Text); 

应该是(2010年2月2日而不是2010年11月2日)

使用以下代码后@oded

 DateTime sDate, eDate = new DateTime(); 

//修改我们使用的日期。 DateTime.TryParseExact(txtFrom.Text,“dd / MM / yyyy”,CultureInfo.InvariantCulture,DateTimeStyles.None,out sDate);

 DateTime.TryParseExact(txtFrom.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out eDate); 

我在edate和sdate获得的是1/1/0001 12:00:00 AM,它应该是3/11/2011。

编辑:此值:“11/2/2010”与格式“dd / MM / yyyy”不匹配。 它匹配格式“d / M / yyyy” – 对于“dd / MM / yyyy”它应该是“11/02/2010”。

这就是TryParseExact失败的原因。 您需要选择正确的格式模式。


DateTime没有格式 。 它只代表日期和时间(在ISO日历中,可能在不同的时区,但这是另一回事)。 它就像一个int – 它不代表“十进制整数”或“hex整数” – 它只是一个特定范围内的整数。 您可以将数字格式化为十进制或hex,但它本身并不具有格式。

听起来你应该用ParseExact解析它来指定文本框转换时的格式,或者可能是TryParseExact

 // This is assuming you're absolutely sure of the format used. This is *not* // necessarily the user's preferred format. You should think about where your // data is coming from. DateTime date; if (DateTime.TryParseExact(text, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) { // Okay, successful parse. We now have the date. Use it, avoiding formatting // it back to a string for as long as possible. } 

您应该将该值保留为DateTime用于所有目的, 除非将其返回给用户 – 此时您可能希望使用其文化设置。

特别是,如果您将值存储在数据库中, 则不应将其转换为文本并将其包含在SQL语句中 – 这就是要求麻烦。 而是使用参数化的SQL语句并将其设置为参数值,仍然作为DateTime

DateTime不以任何特定格式存储日期 – 它使用内部表示(究竟应该无关紧要)。

在将字符串解析为DateTime ,没有固有的格式。 输出值时只有一种格式。 您在调试器中看到的只是使用系统设置转换为字符串。

如果要格式化DateTime ,请使用带有格式字符串的ToString

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

反过来也适用 – 如果你需要明确地解析字符串,使用ParseExactTryParseExactDateTime静态成员):

 DateTime dt; if(DateTime.TryParseExact(txtDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out td)) { // Valid date used in `txtDate.Text`, use dt now. } 

阅读有关自定义和标准日期和时间格式字符串。

为了避免解析日期时数月/天的任何错误,最好使用DateTime.Parse或DateTime.ParseExact而不是ToDateTime

正如这篇post和本文所指出的那样。

使用适当的格式提供程序尝试DateTime.Parse。 在你的情况下应该是

 IFormatProvider culture = new CultureInfo("de-DE", true); DateTime.Parse(txtDate.Text, culture ); 

如果要在给定特定格式的情况下访问它,则应使用DateTime.ToString(字符串格式)。

http://msdn.microsoft.com/en-us/library/zdtaw1bw.aspx