2011-02-10 5 views
11

Estoy recuperando una cadena de mi página y quiero asegurarme de que sea una fecha. Esto es lo que tengo hasta ahora (funciona) y solo quiero saber si esta es la "mejor" manera de hacerlo. Estoy usando .NET 4.¿La mejor manera de obtener una cita con .NET?

int TheMonth =0; 
int TheDay = 0; 
int TheYear = 0; 
DateTime NewDate; 

var TheIncomingParam = Request.Params.Get("__EVENTARGUMENT").ToString(); 

char[] TheBreak = { '/' }; 
string[] TheOutput = TheIncomingParam.Split(TheBreak); 

try { TheMonth = Convert.ToInt32(TheOutput[0]); } 
catch { } 

try { TheDay = Convert.ToInt32(TheOutput[1]); } 
catch { } 

try { TheYear = Convert.ToInt32(TheOutput[2]); } 
catch { } 

if (TheMonth!=0 && TheDay!=0 && TheYear!=0) 
{ 
     try { NewDate = new DateTime(TheYear, TheMonth, TheDay); } 
     catch { var NoDate = true; } 
} 
+44

tienen una buena línea de la recogida. – jerebear

+0

¿Qué versión de asp.net estás usando? – Vishal

+2

Tener mucho dinero – flumpb

Respuesta

13

Utilice uno de los métodos definidos en Parse la estructura DateTime.

Estos se lanzan una excepción si la cadena no es analizable, por lo que es posible que desee utilizar uno de los métodos TryParse lugar (no es tan bonita - que requieren un parámetro de salida, pero son más seguros):

DateTime myDate; 
if(DateTime.TryParse(dateString, 
        CultureInfo.InvariantCulture, 
        DateTimeStyles.None, 
        out myDate)) 
{ 
    // Use myDate here, since it parsed successfully 
} 

Si conoce el formato exacto de la fecha de transferencia, puede intentar usar ParseExact o TryParseExact que toman cadenas de formato de fecha y hora (standard o custom) cuando intenta analizar la cadena de fecha.

+0

¡Ah! ¡Ya está incorporado en el marco! Gracias. Por cierto, conseguí que mi página funcionara: en lugar de métodos de página para enviar un parámetro, lo conseguí para que funcione con __doPostBack. – frenchie

+0

@frenchie - Me alegra saber que lo ha resuelto ... y el BCL tiene montones de tales cosas integradas. Dedique un tiempo a leer la documentación en MSDN, nunca se sabe lo que encontrará. – Oded

+0

Sí, hay muchas funciones integradas que pueden ayudar, pero solo si usted sabe que existen en primer lugar. El otro día descubrí métodos de extensión y estos son increíbles. – frenchie

0

para la URL:using fecha formato ISO (YYYYMMDD)

de la conversión:

datetime.TryParse as suggested above

0

me gustaría simplemente TryParse la cadena de entrada:

private bool ParseDateString() 
    { 
     var theIncomingParam = Request.Params.Get("__EVENTARGUMENT").ToString(); 

     DateTime myDate; 

     if (DateTime.TryParse(theIncomingParam, CultureInfo.InvariantCulture, DateTimeStyles.None, out myDate)) 
     { 
      int TheMonth = myDate.Month; 
      int TheDay = myDate.Day; 
      int TheYear = myDate.Year; 

      // TODO: further processing of the values just read 

      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
Cuestiones relacionadas