2

差し込み印刷やその他の操作を実行する VSTO アプリがあります。

差し込み印刷データベースは Excel データベースであり、DateTime(dd/MM/YYYY) として保存されるフィールドがいくつかあります (例: 29/04/2012)。私の問題は、Excel では日付が適切に表示されるのに、Word では別の形式 (MM/dd/yyyy) (例: 4/29/2012) で表示されることです。VSTO アプリでこの日付を取得しようとすると、文字列の形式が間違っていることを示す変換エラーがスローされます。

これはすべて同じマシンで行われます。VSTO のカルチャ情報を en-US に変更すると、正常に機能します。

// This way fails 
edictoActual.FechaEdicto = Convert.ToDateTime(fields(fieldFechaEdicto).value); 

// This way Works
IFormatProvider Formato = new System.Globalization.CultureInfo("en-US", true);
edictoActual.FechaEdicto = Convert.ToDateTime(fields(fieldFechaEdicto).value,Formato); 

なぜこうなった?

4

1 に答える 1

2
string DateString = "29/04/2012"; //DateString needs to be replaced with your fields value as a string
var dateLength = DateString.Length;
IFormatProvider culture = new CultureInfo("en-US", true);
DateTime dateVal;
switch (dateLength)
{
     case 8:
        {
          dateVal = DateTime.ParseExact(DateString, "M/d/yyyy", culture);
            break;
        }
    case 9:
        {
            // he you can add your own additional if(){} condition to check if date value Day has a length of 2 
            // if so then you know that the date is in m/dd/yyyy format
            // otherwise you know it's in mm/d/yyyy but 
            dateVal = DateTime.ParseExact(DateString, "M/dd/yyyy", culture);
            break;
        }
    case 10:
        {
            dateVal = DateTime.ParseExact(DateString, "MM/dd/yyyy", culture);
            //or change the above to look like the following 
            //dateVal = DateTime.ParseExact(DateString, "dd/MM/yyyy", culture);
            break;
        }

}
于 2013-02-21T16:16:06.957 に答える