Cualquier programador que utilice alguna vez Acces como base de datos tendrá problemas con las fechas; especialmente aquel que se encuentre con que la configuracion regional del equipo de desarrollo es diferente que la del equipo de producción.
Con esto entedemos, por ejemplo una computadora que tiene el formato "dia/mes/año" y de repente se topa con "mes/dia/año". Igual podrá ser cualquier formato como "año/mes/dia" u otro.
La solución que encontré tras meses de errores y trucos es indicar el mes con el nombre, por ejemplo, si la fecha es 10 de abril de 1981, indicarla así: "Apr/10/1981" ó "10/Apr/1981" ó "1981/Apr/10", el access la interpretará y entenderá que estamos hablando del 10 de abril de 1981.
DEsarrollé entonces una clase en C# para hace esta tarea, aqui la expongo:
using System;
namespace TyroDeveloperDLL
{
public class ISODates{
/// <summary>
/// Devuelve el formato ISO de fechas para MSAccess
/// </summary>
/// <param name="prmDate">Fecha a convertir</param>
/// <returns>Fecha ISO para MSAccess</returns>
/// <example>10 Abril 1980 10:25 a.m.= Apr-10-1980 10:25:00</example>
public static string MSAccessDate(DateTime prmDate){
string[] varMonth ={"Jan","Feb","Mar","Apr",
"May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
string varDay = "01";
string varHour = "00";
string varMin = "00";
string varSec = "00";
varDay = prmDate.Day.ToString();
if (varDay.Length == 1){
varDay = "0" + varDay;
}
varHour = prmDate.Hour.ToString();
if (varHour.Length == 1){
varHour = "0" + varHour;
}
varMin = prmDate.Minute.ToString();
if (varMin.Length == 1){
varMin = "0" + varMin;
}
varSec = prmDate.Second.ToString();
if (varSec.Length == 1){
varSec = "0" + varSec;
}
return (varMonth[prmDate.Month - 1] +
"-" + varDay + "-" + prmDate.Year.ToString() +
" " + varHour + ":" + varMin + ":" + varSec);
}
}
}
Espero que sea de utilidad...
Visita mi Blog: