我尝试将日期时间转换为字符串并返回,但要使其适用于所有文化。
我基本上有一个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");
现在我的问题:
我希望你能帮助我。我实际上没有电脑来测试不同的文化,所以我非常害怕我做错了什么。
答案 0 :(得分:7)
您可以使用Convert.ToDateTime
或DateTime.Parse
方法,而不是使用DateTime.ParseExact
方法。两者都允许您传递一种文化,告诉您如何格式化日期。
DateTime.ParseExact
方法还允许您指定所需的格式,因此您可以使用此方法或多或少地解析任何格式。
修改强>
关于Convert.ToDateTime
。文档说明在解析时使用当前文化:http://msdn.microsoft.com/en-us/library/xhz1w05e.aspx
可以使用System.Threading.Thread.CurrentThread.CurrentCulture
属性找到当前文化。
<强> EDIT2:强>
哦。如果您不确定给定格式是否无效,您可能还想使用DateTime.TryParse
和DateTime.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);