Validar fecha en C Sharp

Iniciado por DanielPy, 6 Julio 2013, 19:04 PM

0 Miembros y 1 Visitante están viendo este tema.

DanielPy

Hola a todos.-
Tengo una duda y es, como debo hacer para que no me muestre sábado 06 de julio
de 2013 si no Sábado 06 de Julio de 2013, hay alguna manera de que el lenguaje lo haga de forma automática o ¿debo hacerlo a mano?.-

Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;

namespace fechas
{
public class ValidarFecha
{
public void FechaCorrecta()
{
string[] format = new string[] { "dd-MM-yyyy" };
Console.Write("\n Ingrese una fecha(ej. 07-07-2013)....:");
string value = Console.ReadLine();
DateTime datetime;
if (DateTime.TryParseExact(value, format, System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.NoCurrentDateDefault, out datetime))
{
Console.Write(" \n Ingresó...: " + datetime.ToString("dddd") + " " + datetime.Day + " de " + datetime.ToString("MMMM")
+ " de " + datetime.Year);
}
else
{
Console.WriteLine("\n No es una fecha valida...");
}
}
}

class Program
{
static void Main(string[] args)
{
fechas.ValidarFecha vf = new fechas.ValidarFecha();
vf.FechaCorrecta();

Console.ReadKey();
}
}
}


Otra cosita ¿hay una manera mejor para lograr lo mismo?

Muchos saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-

DanielPy

Hola a todos.
El trozo de código a continuación soluciona mi problema solo resta que me digan si hay una manera mejor.-

Código (csharp) [Seleccionar]
string dia = datetime.ToString("dddd");
dia = char.ToUpper(dia[0]) + dia.Substring(1);
string mes = datetime.ToString("MMMM");
mes = char.ToUpper(mes[0]) + mes.Substring(1);
Console.Write(" \n Ingresó...: " + " " + dia + " " + datetime.Day + " de " + mes
+ " de " + datetime.Year);


Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-

DarK_FirefoX

Por lo que veo, lo único que deseas hacer es poner en mayúsculas la letra inicial del día de la semana y del mes, lo que pones en la segunda respuesta no esta mal. Pero te recuerdo que el método Substring hace una copia del string y en termines de tiempo ocupa tiempo. Podrías hacer un switch() y predefinir tus strings para cada día y mes, aunque tendrías un poquito más de código. Por lo demás esta bien lo que haces para solucionar tu problema. No obstante ahora no he podido probar todo estoy en una MAC y no tengo ahora mismo como compilar el código. Bueno, espero servirte de ayuda. Un saludo Armando

Eleкtro

#3
Cita de: DanielC# en  6 Julio 2013, 19:04 PM¿hay una manera mejor para lograr lo mismo?

Sí, se puede mejorar mucho.

1 - Puedes evitar la declaración de todas las variables (Ya que solo le das uso una única vez, para eso es mejor "usar" diréctamente en 1 paso, en lugar de los 3 pasos que dás: "declarar variable + almacenar contenido en variable + usar variable").
2 - En lugar de una comparación me parece más correcto añadir un control de errores (Un Try/Catch por si en un futuro quieres añadir aún más tipos de excepciones, en lugar de añadir más If's).
3 - Para la organización de los elementos del string debes usar "String.Format": http://msdn.microsoft.com/en-us/library/system.string.format.aspx
4 - Para el formato de la fecha es tán simple como usar el método "ToString" con el formato adecuado ("D"): http://msdn.microsoft.com/en-us/library/zdtaw1bw.aspx .
5 - Para el formato del string resultante, puedes usar la función "ToTitleCase", y hacer un pequeñísimo ajuste añadiendo un "Replace" para modificar "De" por "de".
En fin... en general se puede simplificar bastante el code.

Aquí tienes, en VB:

Código (vbnet) [Seleccionar]
Imports System.Globalization

Module Module1

   Sub Main(args As String())
       ValidarFecha()
       Console.ReadLine()
   End Sub

   Private Sub ValidarFecha()

       Console.Write("Ingrese una fecha(ej. 07-07-2013)....:")

       Try

           Console.WriteLine(CultureInfo.CurrentCulture.TextInfo.ToTitleCase( _
                             String.Format("Ingresó: {0}", _
                             Date.Parse(Console.ReadLine).ToString("D"))).Replace("De", "de"))

       Catch ' ex As Exception
           Console.WriteLine("No es una fecha valida...")
       End Try

   End Sub

End Module



En C#:
(Este me ha costado un poquito, he tenido que usar convertidor online, hacer algunas correcciones manuales, y ajustar las indentaciones innecesarias)

Código (csharp) [Seleccionar]
   using System;
   using System.Globalization;
   
   static class Module1 {
   
      public static void Main(string[] args) {
          ValidarFecha();
          Console.ReadLine();
      }
   
      private static void ValidarFecha() {

          Console.WriteLine("Ingrese una fecha (ej. 07-07-2013)...:");
   
          try {

              Console.WriteLine(CultureInfo.CurrentCulture.TextInfo.ToTitleCase(
                                string.Format("Ingresó: {0}",
                                DateTime.Parse(Console.ReadLine()).ToString("D"))).Replace("De", "de"));
   
          } catch {
   
              Console.WriteLine("No es una fecha valida...");
   
          } // Try
   
      } // ValidarFecha
   
   } // Module1



Saludos!








DanielPy

Hola EleKtro H@cker
Muchas gracias funciona a la perfección, solo una reflexión: por dios,cuanto me falta.-

Saludos y muchas gracias.-
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-