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

时间:2011-05-05 07:09:48

标签: c# datetime cultureinfo

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

我基本上有一个Textbox(tbDateTime)和一个标签(lbDateTime)。标签告诉用户软件期望输入tbDateTime的格式。文本框的输入将用于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");

现在我的问题:

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

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

3 个答案:

答案 0 :(得分:7)

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

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

修改
关于Convert.ToDateTime。文档说明在解析时使用当前文化:http://msdn.microsoft.com/en-us/library/xhz1w05e.aspx

可以使用System.Threading.Thread.CurrentThread.CurrentCulture属性找到当前文化。

<强> EDIT2:
哦。如果您不确定给定格式是否无效,您可能还想使用DateTime.TryParseDateTime.TryParseExact

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

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

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

答案 1 :(得分:5)

Convert.ToDateTime方法会调用DateTime.Parse来解析字符串,使用当前文化(CultureInfo.Current)。

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

DateTime data = DateTime.Parse(tbDateTime.Text, new CultureInfo("en-GB"));

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

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

答案 2 :(得分:0)

另一种解决方案:

// Specify the current language (used in the current system you are working on)
CultureInfo currentCulture = CultureInfo.GetCultureInfo(CultureInfo.CurrentCulture.ToString());
// Specify the language that we need
CultureInfo myLanguage = CultureInfo.GetCultureInfo("en-US");

// Adapt the DateTime here, we will use the current time for this example
DateTime currentDate = DateTime.Now;
// The date in the format that we need
string myDate = DateTime.Parse(currentDate.ToString(), currentCulture).ToString(myLanguage);