2015-03-26 2 views
0

Привет, мое приложение Excel, я хочу преобразовать многие значения и проверить его. Но при преобразовании double и dateTime i сталкиваются с некоторыми серьезными проблемами. Ниже фрагмент кода хорошо работает для английской культуры. Но когда культура немецкая, я получаю текст как 24.3.2014. Теперь он преобразуется в double и возвращает двойное значение, но я не хочу, чтобы он был преобразован в double. Любое предложение об этом.?Как конвертировать Double и DateTime Правильно в соответствии с текущей культурой?

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); 
} 
+0

Что означает 'str Text'? Считаете ли вы, что вы можете возвращать как double, так и Datetime в одну и ту же функцию? ** Опубликовать компилируемый код ... ** – EZI

+0

Попробуйте разобрать на первый взгляд _then_, чтобы удвоить? или вытащите _value_ из ячейки вместо _text_, тогда вам не нужно беспокоиться о форматировании. –

+0

Извините за строку, я ее изменил. Если он двойной, я хочу вернуть двойное значение, и если это дата, я хочу вернуться в качестве даты. Но если культура немецкая, дата конвертируется двойным. – Deepak

ответ

0

В немецком . является NumberGroupSeparator не NumberDecimalSeparator на английском языке. Это похоже на разборе 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); 
} 
+0

@Deepak Нет, он не будет преобразован в Date. Покажите некоторое уважение людям, которые проводят время, чтобы ответить на ваш вопрос. Скопируйте/вставьте код выше и запустите его, прежде чем делать * false * comments .... – EZI

 Смежные вопросы

  • Нет связанных вопросов^_^