将日期从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");
反过来也适用 – 如果你需要明确地解析字符串,使用ParseExact
或TryParseExact
( DateTime
静态成员):
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(字符串格式)。