Conversione di date e numeri location aware

Mi e’ capitato di dover salvare alcune informazioni, contenenti numeri e date, in un file di testo per poi rileggerle con un altro programma.

Tutto fattibile e semplice utilizzando il metodo .ToString(), se non che l’altro programma , quello che doveva leggere i dati, aveva delle impostazioni regionali (Regional Settings) diverse dal programma che salvava i dati. Le date erano nel formato mese/giorno/anno sul primo, giorno/mese/anno sul secondo, i numero avevano come separatore decimale il punto sul primo, la virgola nel secondo. Le conversioni quindi sballavano tutte.

Ho risolto forzando il salvataggio e la lettura in un formato unico, ecco come.

Salvataggio dei dati:

double dblAmount;
string[] arrTextToSave;

System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.CurrentUICulture;
objFormatProvider = (System.Globalization.NumberFormatInfo)
ci.NumberFormat.Clone();
objFormatProvider.NumberDecimalSeparator = ".";

arrTextToSave new string[2] { DateTime.Now.ToString("yyyy/MM/dd"),
dblAmount.ToString(objFormatProvider) };

Lettura dei dati:

DateTime dtTransactionDate;
double dblAmount;

dtTranscationDate = Convert.ToDateTime(arrTextToSave[0]);
dblAmount = Convert.ToDouble(arrTextToSave[1], _objFormatProvider);

Cosi', grazie a Vlad Tepes e a Totzkeeeeee, ho risolto tutti i problemi anche per il .NET Compat Framework!

1 Comments

  1. Ciao Alfredo, puoi usare anche la InvariantCulture per lavoretti del genere

Leave a Reply