如何根据当前文化正确转换Double和DateTime?

时间:2015-03-26 19:43:09

标签: c# datetime double

您好我的Excel应用程序我希望转换许多值并验证它。但在转换double和dateTime的同时,我面临着一些严重的问题。以下代码片段适用于英语文化。但是当文化是德语时,我得到的文字是24.3.2014。现在它被转换为double并返回一个double值,但我不希望它被转换为double。有任何建议。?

string Text= "24.03.2014";
CultureInfo ci = CultureInfo.CreateSpecificCulture("de-DE");
var numberformat = ci.NumberFormat;
double d;
DateTime date;
if (double.TryParse(Text, NumberStyles.Any, numberformat, out d))
{
    Console.WriteLine(d); //prints 24032014.0
}
else if (DateTime.TryParse(Text, numberformat, DateTimeStyles.None, out date))
{
    Console.WriteLine(date);
}

1 个答案:

答案 0 :(得分:0)

德语. NumberGroupSeparator 而不是 NumberDecimalSeparator ,如英文。它类似于使用 en 文化解析24,03,2014加倍,这也会给24032014

请参阅:

var culture = CultureInfo.GetCultureInfo("en-US");
Console.WriteLine(culture.NumberFormat.NumberDecimalSeparator + " " + culture.NumberFormat.NumberGroupSeparator);

culture = CultureInfo.GetCultureInfo("de-DE");
Console.WriteLine(culture.NumberFormat.NumberDecimalSeparator + " " + culture.NumberFormat.NumberGroupSeparator);

因此,如果您尝试在双倍代码之前解析DateTime。

CultureInfo ci = CultureInfo.CreateSpecificCulture("de-DE");
var numberformat = ci.NumberFormat;
double d;
DateTime date;
if (DateTime.TryParse(Text, numberformat, DateTimeStyles.None, out date))
{
    Console.WriteLine(date);
}
else if (double.TryParse(Text, NumberStyles.Any, numberformat, out d))
{
    Console.WriteLine(d); 
}