如何使DateTime独立于当前的文化?

S. *_*ter 5 c# datetime cultureinfo

我想尝试将日期时间转换为字符串并返回,但要使其适用于所有文化.

我基本上有一个Textbox(tbDateTime)和一个标签(lbDateTime).标签告诉用户软件期望输入tbDateTime的格式.Textbox的输入将用于MySQL命令.

目前它的工作原理如下:

lbDateTime.Text = "DD.MM.YYYY hh:mm:ss";   // I live in germany
DateTime date = Convert.ToDateTime(tbDateTime.Text);
String filter = date.ToString("yyyy-MM-dd HH:mm:ss");
Run Code Online (Sandbox Code Playgroud)

现在我的问题:

  • 是否可以根据当前文化确定lbDateTime.Text的格式字符串?
  • Convert.ToDateTime函数使用哪种格式?

我希望你能帮助我.我实际上没有电脑来测试不同的文化,所以我非常害怕我做错了什么.

Run*_*tad 7

Convert.ToDateTime您可以使用DateTime.ParseDateTime.ParseExact方法而不是使用方法.两者都允许您传递一种文化,告诉您如何期望格式化日期.

DateTime.ParseExact方法还允许您指定所需的格式,因此您可以使用此方法或多或少地解析任何格式.

编辑:
关于Convert.ToDateTime.文档说解析时使用当前的文化:http://msdn.microsoft.com/en-us/library/xhz1w05e.aspx

使用该System.Threading.Thread.CurrentThread.CurrentCulture物业可以找到当前的文化.

编辑2:
哦.您也可以使用DateTime.TryParseDateTime.TryParseExact如果你不确定是否与给定的格式是无效的.

EDIT3:
编辑大量的在这里......我看到你要确定用户已经输入的日期相匹配的文化字符串.没有一般的解决方案可以保证在这里工作.比如说用户输入了日期01.02.11.如果此日期在day.month.year或month.day.year或year.month.day等等,则无法确定.

您可以做的最好的事情是拥有一个预期的输入文化列表,并从最可能的开始,并尝试使用它来解析日期.如果失败了,你可以尝试第二种,等等......

但实际上不建议这样做.要么为用户提供预期的格式,要么更好,使用日期输入框确保以适当的格式接收所选日期.


Guf*_*ffa 5

Convert.ToDateTime方法将DateTime.Parse使用当前culture(CultureInfo.Current)调用解析字符串.

您可以在解析字符串时指定区域性.例:

DateTime data = DateTime.Parse(tbDateTime.Text, new CultureInfo("en-GB"));
Run Code Online (Sandbox Code Playgroud)

您可以使用DateTime.ParseExact(或DateTime.TryParseExact)使用自定义日期格式解析字符串.例:

DateTime data = DateTime.ParseExact(tbDateTime.Text, "dd'.'MM'.'yyyy HH':'mm':'ss", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)