【问题标题】:Trouble parsing string date in us with the Datetime.TryParse使用 Datetime.TryParse 无法解析我们的字符串日期
【发布时间】:2011-09-30 13:29:53
【问题描述】:

我正在尝试将一个变量以字符串格式存储在 dateTime 变量中。

System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("en-US");
System.Globalization.DateTimeFormatInfo usaDateFormatInfo = culture.DateTimeFormat;

string sDataStored = "10/15/2011";
if (DateTime.TryParse(sDataStored , usaDateFormatInfo,       System.Globalization.DateTimeStyles.None, out TestedDateTime))
DateTime dMyUSDateTime = TestedDateTime;

不幸的是,我的变量中的最终结果不是:“10/15/2011”而是“15/10/2011”(法国文化,目前是应用程序的当前文化)。

与 TryParseExact 的结果相同。

我可以在“try/catch”中通过“Convert”,但我确信还有其他更好的方法来解决这个问题...... 谢谢你的帮助。

【问题讨论】:

  • 那么,最终结果是“10/15/2011”而不是“10/15/2011”? Errrrr...他们是一样的...
  • 好的,你知道了...我犯了一个小错误 :) 更正

标签: c# date cultureinfo


【解决方案1】:

当你说结果是15/11/2011 你在哪里看到的?在调试器中?调试器只会根据您当前的文化格式化变量(只需调用 ToString)。

DateTime 对象不存储解析它的文化。当您将其转换回字符串时,您需要将文化传递给它,以便它根据美国文化进行格式化。

例如

dMyUsDateTime.ToString(usaDateFormatInfo)

【讨论】:

  • “出日期时间”?如何将区域性传递给 out DateTime 对象?
  • @PetersLast 你在用 DateTime 做什么?当您将其转换回毒刺时,您需要将文化传递给它。
  • 15/11/2011 出现在 DateTime 值 dMyUSDateTime 和 TestedDateTime 中。它最终显示在我的 Web 应用程序的 Teleriks 日历控件文本框中。
  • @PetersLast 好的,所以你真正的问题是,如何在 Telerik 的日历控件中将 DateTime 格式化为不同的文化?尝试为此提出一个新问题。
  • @PetersLast,最后一次。 DateTime 结构独立于区域性。 2011 年 1 月 1 日在所有文化中都是相同的日期。唯一的区别在于它的显示方式,那就是文化发挥作用的时候。无论您使用什么应用程序来查看 DateTime 结构,都在应用该区域性。 Visual Studio 的调试视图通常只调用 ToString() 来显示变量的值,该变量也将应用默认区域性。
【解决方案2】:

DateTime 没有附加文化。当您想要显示 DateTime 值时,您需要指定要使用的日期/时间格式。如果不指定格式(或在 Visual Studio 调试器中查看值),则使用当前线程的当前区域性。

string result = someDateTime.ToString("d", new CultureInfo("en-US"));
// result == "10/15/2011"

【讨论】:

  • 我已经得到了字符串,这就是我想要得到的变量 DateTime(格式正确)。实际上,在 DateTime dResult.ToShortDateString = "10/15/2011" 中转换字符串 sDate "10/15/2011" 而不是现在的 "15/10/2011"。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
相关资源
最近更新 更多