10 messaggi dal 10 marzo 2006
Ciao a tutti,
ho problema scocciante. Sto sviluppando un batch in C# 3.5 che deve interfacciarsi con db2.
Il problema è che quando lo faccio girare sul server di sviluppo che ha le impostazioni in inglese,l'esecuzione va in eccezione mostrandomi il seguente messaggio:

"String was not recognized as a valid DateTime"

in pratica mentre in locale la data è del tipo 31/12/2010 12.00.00, sul server viene presa la data nel formato 12/31/2010 12:00:00 AM.
Trattandosi di un batch e non di una applicazione web non posso globalizzare il tutto sul web config.Non so se c'è un modo per farlo aggiungendo qualche chiave nell'app.config.
Ipotizzando una variabile dateString che quindi valorizzo con quello che mi arriva e cioé con qualcosa del tipo : "12/31/2010 12:00:00 AM",ho provato diverse soluzioni:

1) DateTime dateValue = Convert.ToDateTime(dateString, new System.Globalization.CultureInfo("it-IT"));

2) DateTime _dateValue = DateTime.Parse(dateString, new CultureInfo("en-US", false));
DateTime datevalue = Convert.ToDateTime(string.Format("{0:d}", _dateValue));

3) string[] formats = new string[] { "MM/dd/yyyy", "dd/MM/yyyy", "MM/dd/yyyy HH:mm", "dd/MM/yyyy HH.mm", "MM/dd/yyyy hh:mm tt", "dd/mm/yyyy hh.mm tt", "MM/dd/yyyy HH:mm:ss","dd/mm/yyyy HH.mm.ss", "MM/dd/yyyy hh:mm:ss tt", "dd/MM/yyyy hh.mm.ss tt" };
DateTime datevalue = DateTime.ParseExact(dateString, formats, null, DateTimeStyles.None);

4) System.Threading.Thread thisThread = System.Threading.Thread.CurrentThread;
thisThread.CurrentCulture = new System.Globalization.CultureInfo("it-IT");
DateTime datevalue = Convert.ToDateTime(string.Format("{0:d}", dateString));

In tutti i casi l'eccezione lanciata è sempre la stessa.
Ho come la sensazione che sia una questione assai semplice da risolvere.
Qualcuno ha idea di come poterne venire a capo?

Grazie!!
dal quel che si legge qui ci sono vari formati per la data, ma sembra che il formato di default ODBC sia yyyy-mm-dd hh:mm:ss.nnnnnn.

Nel db com'è impostato?

Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna.
-Albert Einstein-
10 messaggi dal 10 marzo 2006
Guarda al momento ho risolto aggiungendo una chiave all'app.config e poi facendo quanto segue considerando che la data da tradure mi arriva tramite query OLEDB e non ODBC tramite la variabile RoDom["prddal"]:

string cultura = ConfigurationManager.AppSettings["culture"].ToString();
Thread.CurrentThread.CurrentCulture = new CultureInfo(cultura);
DateTime _data_dal = DateTime.Parse(RoDom["prddal"].ToString(), new CultureInfo(cultura, false));
CultureInfo ci = new CultureInfo("it-IT");
Thread.CurrentThread.CurrentCulture = ci;
DateTime data_dal = Convert.ToDateTime(_data_dal.ToString("d",ci));
Thread.CurrentThread.CurrentCulture = new CultureInfo(cultura);

Il problema che non mi piace affatto come soluzione,è come minimo poco elegante.
Ho dovuto fare un metodo che fa quanto suscritto per ogni data che elaboro..
Ci vorrebbe qualcosa tipo il globalization a livello di web.config di asp.net. Ma anche perché risolto con le date mo c'ho il problema dei numeri decimali con virgole al posto dei punti...


Ogni aiuto è ben accetto.

Grazie
non mi hai detto in che formato è impostata la data nel db, ce ne sono millllle:
yyyy-mm-dd
mm-dd-yyyy
dd-mm-yyyy

Non conosco db2, ma migrando da mysql a postgresql a sql server avevo un problema simile, è bastato capire in che modo passare la data e per il resto ci pensa DateTime e se non c'è, cosa che escludo te la formatti come vuoi tu

Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna.
-Albert Einstein-
10 messaggi dal 10 marzo 2006
Ciao fileman e grazie per le risposte.
Guarda come ho scritto nel primo post il formato che mi arriva è:

12/31/2010 12:00:00 AM

quindi dovrebbe essere

MM/dd/yyyy hh:mm:ss tt

dico dovrebbe perché se vedi alla soluzione 3) del primo mio post avevo impostato:

string[] formats = new string[] { "MM/dd/yyyy", "dd/MM/yyyy", "MM/dd/yyyy HH:mm", "dd/MM/yyyy HH.mm", "MM/dd/yyyy hh:mm tt", "dd/mm/yyyy hh.mm tt", "MM/dd/yyyy HH:mm:ss","dd/mm/yyyy HH.mm.ss", "MM/dd/yyyy hh:mm:ss tt", "dd/MM/yyyy hh.mm.ss tt" };

quindi in teoria doveva essere gestito come pattern,ma continuava ad andare in eccezione.
Boh.. il mistero si infittisce. :-(

Grazie
Modificato da c#_beginner il 30 gennaio 2011 10.05 -
Modificato da c#_beginner il 30 gennaio 2011 10.05 -
non mi sembra corrisponda ai formati presenti nel .net, fanne uno custom.
All'inserimento del valore nel db usi:
datetimeVariabile.ToString("MM/dd/yyyy hh:mm:ss tt")

Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna.
-Albert Einstein-

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.