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

时间:2011-10-06 12:40:06

标签: c# asp.net datetime datetime-format

我正面临一个小问题,在尝试了这么多事情之后我无法做到这一点就在这里......我的页面中有一个文本框,我在其中输入日期,我希望在日期时间中显示该日期对象

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

我希望我在这里有意义,我想要的就是这样......

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

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

使用以下代码后编码

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。

5 个答案:

答案 0 :(得分:11)

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.
}

了解customstandard日期和时间格式字符串。

答案 1 :(得分:11)

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

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


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

听起来您应该使用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

答案 2 :(得分:2)

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

this threadthis article指出。

答案 3 :(得分:-1)

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

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

答案 4 :(得分:-1)

如果您想以特定格式访问它,则应使用DateTime.ToString(字符串格式)。

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