Ayuda con Conversion (String to Date)

21/06/2007 - 00:43 por Claudio Quezada | Informe spam
Que tal,

tengo el siguiente codigo:

string mFechas="";
long mFecha=0;
int mLargo=0;
DateTime pdFechaUltimaPublicacion;
mFechas='22-06-2007'
mLargo=mFechas.Length-11;
mFechas=mFechas.Substring(mLargo,10).ToString();
pdFechaUltimaPublicacion=Convert.ToDateTime(mFechas);
mFecha = Convert.ToInt64(pdFechaUltimaPublicacion.ToString("yyyyMMdd"));

mFechas es llenado con un dato de la BD con formato '22-06-2007', la cosa es
que se me cae la aplicacion, el error es:

System.Web.Services.Protocols.SoapException: Server was unable to process
request.

System.FormatException: String was not recognized as a valid DateTime.


at System.DateTimeParse.GetDayOfNNY(DateTimeResult result, DateTimeRawInfo
raw, DateTimeFormatInfo dtfi)
at System.DateTimeParse.ProcessTerminaltState(Int32 dps, DateTimeResult
result, DateTimeRawInfo raw, DateTimeFormatInfo dtfi)
at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi,
DateTimeStyles styles)
at System.DateTime.Parse(String s, IFormatProvider provider, DateTimeStyles
styles)
at System.DateTime.Parse(String s, IFormatProvider provider)
at System.DateTime.Parse(String s)
at System.Convert.ToDateTime(String value)
at
eDIM4.ProporcionadorPromocion.Controladores.ProporcionadorPromocionController.ObtenerPromocion(AvisoCompleto
pAviso, String psCodigoTarifa, Int64 lDiasPublicacionSemana)
in
d:\\proyecto\\RTF\\DIM4\\tarificacion.root\\componentes\\eDIM4.proporcionadorpromocion\\controladores\\proporcionadorpromocioncontroller.cs:line
28
at
eDIM4.ProporcionadorPromocion.ProporcionadorPromocionFacade.ObtenerPromocion(AvisoCompleto
pAviso, String psCodigoTarifa, Int64 lDiasPublicacionSemana)
in
D:\\Proyecto\\RTF\\DIM4\\Tarificacion.root\\Componentes\\eDIM4.ProporcionadorPromocion\\ProporcionadorPromocionFacade.cs:line
35
at
eDIM4.Tarificador.Controladores.TarificarAvisoController.Tarificar(AvisoCompleto
pAviso, String psCodigoTarifa)
in
d:\\proyecto\\RTF\\DIM4\\tarificacion.root\\componentes\\eDIM4.tarificador\\controladores\\tarificaravisocontroller.cs:line
59
at
eDIM4.Tarificador.Controladores.TarificarAvisoController.Tarificar(AvisoCompleto
pAviso)
in
d:\\proyecto\\RTF\\DIM4\\tarificacion.root\\componentes\\eDIM4.tarificador\\controladores\\tarificaravisocontroller.cs:line
90
at eDIM4.Tarificador.TarificadorFacade.Tarificar(Aviso pAviso)
in
d:\\proyecto\\RTF\\DIM4\\tarificacion.root\\componentes\\eDIM4.tarificador\\tarificadorfacade.cs:line
44
at WSDEM.Tarificacion.Tarificador.TarificarAviso(Aviso pAviso)
in
d:\\proyecto\\RTF\\DIM4\\empty\\wsdem.tarificacion\\tarificador.asmx.cs:line
60


"String was not recognized as a valid DateTime" <-- cambie el valor de la BD
a '2007-06-22' y me arroja el mismo error...

Lo extraño es que en produccion esto no se cae, solo se cae en desarrollo...

Le he dado vueltas todo el dia y no consigo dar con solucion alguna...

gracias...
 

Leer las respuestas

#1 Alberto Poblacion
21/06/2007 - 08:09 | Informe spam
"Claudio Quezada" wrote in message
news:
string mFechas="";
long mFecha=0;
int mLargo=0;
DateTime pdFechaUltimaPublicacion;
mFechas='22-06-2007'
mLargo=mFechas.Length-11;
mFechas=mFechas.Substring(mLargo,10).ToString();
pdFechaUltimaPublicacion=Convert.ToDateTime(mFechas);
mFecha = Convert.ToInt64(pdFechaUltimaPublicacion.ToString("yyyyMMdd"));

mFechas es llenado con un dato de la BD con formato '22-06-2007', la cosa
es que se me cae la aplicacion, el error es:
[...]at System.Convert.ToDateTime(String value)




Como puedes ver en la traza de pila, se produce un error en algún sitio en
el que estás haciendo un Convert.ToDateTime, que suponiendo que coincida con
el código que has puesto, sería en la linea donde tienes
Convert.ToDateTime(mFechas), en la cual mFechas vale "22-06-2007". Esta
conversión slo tendrá éxito si el formato de fechas en el CurrentCulture
está establecido en dd-MM-yyyy. Esto explica que no se caiga en producción
pero sí en desarrollo, ya que ambos sistemas pueden tener distinta
configuración regional.
Si es una aplicación web o un servicio web, puedes poner el Culture fijo
dentro del web.config. Pero mejor todavía, si sabes el formato en que te
vienen los datos desde la base de datos, en lugar de usar un
Convert.ToDateTime, conviértelo siempre con un DateTime.Parse(valor,
formateador), indicándole que el formateador es un new CultureInfo("es-ES"),
y así te aseguras de que toma el formato deseado en lugar de algún valor
predeterminado tomado de la configuración del sistema.

Preguntas similares