Mostrando entradas con la etiqueta DateTime. Mostrar todas las entradas
Mostrando entradas con la etiqueta DateTime. Mostrar todas las entradas

jueves, 1 de julio de 2010

Cambiar los valores de un objeto DateTime

Hay que reconocer que tratar con fechas siempre es un engorro por sus “particularidades”. Pero el que cuando creas un objeto DateTime ya no lo puedas modificar directamente más que con operaciones aritméticas o con un objeto TimeSpan, pues como complica su uso.

 Por ello almaceno en esta entrada la manera facil de modificar cualquiera de los datos de una fecha u hora almacenados en este tipo de objetos.

Para ello lo que haremos es crear siempre un nuevo objeto DateTime pero con los valores que querramos como se vé en los siguientes ejemplos.

Partimos de la base de un DateTime con el siguiente contenido: 22/11/1967 00:00:00
DateTime fecha = new DateTime(2010, 11, 22, 0, 0, 0);
DateTime fechaDesde;
DateTime fechaHasta;
Para añadir días, meses, o años y que el propio método se enrede con la coherencia de los datos (no vale un 30 de febrero, pero si un 29 cuando el año es bisiseto) yo aconsejo utilizar el método Add().
fecha = fecha.AddDays(1);
Pero si lo que quiero es situarlo en una hora exacta el sistema que yo uso es:
fechaDesde = new DateTime(fecha.Year, fecha.Month, fecha.Day, 0, 0, 0);
fechaHasta = new DateTime(fecha.Year, fecha.Month, fecha.Day, 23, 59, 59);
Listo”!!

miércoles, 26 de mayo de 2010

IsFecha. Un IsDate en C# para fechas en es-ES

Las malditas fechas en conjunción con el IIS y el SQL pueden causar más de un dolor de cabeza a cualquiera :)

Por eso me he echo una función similar al IsDate de Visual Basic.Net pero para C# y que me permite identificar una fecha en formato dd/MM/yyyy en cualquier idioma del servidor.

/// <summary>
///
Comprueba si el valor es una fecha.
/// </summary>
/// <param name="cadenaFecha"></param>
/// <returns>
Se comprueba en la Cultura es-ES (España).</returns>
static public Boolean IsFecha (string cadenaFecha)
{
CultureInfo es = new CultureInfo("es-ES");
DateTime fechaTemp;

return DateTime.TryParseExact(cadenaFecha, "dd/MM/yyyy", es, DateTimeStyles.AdjustToUniversal, out fechaTemp);
}


Y aquí otro método para realizar la conversión de texto en un objeto DateTime que también se pase por el arco de la gloría el idioma del SO del servidor o del IIS.


/// <summary>
///
Convierte una cadena en fecha. Si falla en la conversión devuelve la fecha actual.
/// </summary>
/// <param name="fecha"></param>
/// <returns></returns>
static public DateTime convierteEnFecha(string fecha)
{
CultureInfo es = new CultureInfo("es-ES");
DateTime fechaTemp = DateTime.Now;

if (DateTime.TryParseExact(fecha, "dd/MM/yyyy", es, DateTimeStyles.None, out fechaTemp) == false)
{ fechaTemp = DateTime.Now; }

return fechaTemp;
}

Ahora a investigar si cambiando la cultura de toda la web me valdría… :)