Professional Documents
Culture Documents
En este ejemplo te muestro cómo utilizar el formato de fecha correcta según la cultura en la
que se esté ejecutando nuestra aplicación, ya sea de escritorio o aplicación Web.
También te muestro cómo realizar una consulta de SQL Server usando parámetros en la
consulta.
En este link tienes cómo averiguar el separador decimal y el de miles y otras cosas
relacionadas con el formato numérico.
Introducción:
Es una cosa muy simple, pero creo que es conveniente saber cómo hacerlo.
Te explico que este código es el que utilizo en mis foros a la hora de mostrar la fecha
actual.
Debido a que el foro está alojado en un servidor que reside en los Estados Unidos de
Norteamérica (USA), dicho formato de fecha y hora es diferente, por ejemplo al usado en
España.
En realidad, la fecha la puedo mostrar como quiera, pero si, por ejemplo, esa fecha (o
formato) la quiero usar para acceder a una base de datos, si no está en el mismo formato del
idioma en el que se ejecuta la base de datos, posiblemente no funcionará correctamente.
El código que utilizo es el siguiente, en este caso para mostrar dos fechas, una 15 días antes
de la actual y otra la actual, ambas en formato universal, es decir, según la hora universal
(UTC) o de Greenwich (GMT):
Dim s As String
s =
System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDateP
attern
txtDesde.Text = DateTime.Now.ToUniversalTime().Subtract(New TimeSpan(15,
0, 0, 0)).ToString(s)
txtHasta.Text = DateTime.Now.ToUniversalTime().ToString(s)
En este caso, estoy usando la propiedad ShortDatePattern que vendría a ser algo así como
MM/dd/yyyy, es deir, en formato mes/día/año.
Por otro lado, al usar el método ToUniversalTime de la la propiedad Now, estoy obteniendo
la fecha UTC, es decir, para que no utilice la del pacífico, que es la hora que tiene mi
servidor, por ejemplo, estos valores que se muestran a continuación se obtienen
directamente del servidor, y en el caso de que estés viendo la página desde elGuille.info,
(pulsa en el link para ir a esta misma página en elguille.info), verás que hay unas 8 horas de
diferencia con la fecha universal (UTC/GMT), sin embargo, si lo ves desde
MundoProgramacion.com, (pulsa en el link para ir a esta misma página en
mundoprogramacion), esa fecha será la de España, ya que el servidor donde está alojado
ese sitio reside en España.
Nota:
Internamente esta página está usando código de Visual Basic .NET para mostrar esas
fechas.
¿Cómo influye esto en una consulta de SQL Server?
Aunque parezca una tontería, al usar los valores desde y hasta del código mostrado más
arriba, si esos valores los uso en una consulta de SQL Server para obtener los datos entre
dos fechas, funcionará bien lo ejecute donde lo ejecute, pero si en lugar de usar la "fecha
globalizada" usara el formato habitual: dd/MM/yyyy, sólo me funcionaría si la base de
datos estuviese en un servidor configurado con ese "tipo" de fecha.
La consulta usada es esta: (en realidad faltan cosas que indicar, pero lo importante es cómo
usarla)
''' <summary>
''' Obtener los registros de una tabla entre dos fechas.
''' </summary>
''' <param name="desde">Fecha desde la que queremos los datos</param>
''' <param name="hasta">Fecha hasta la que queremos los datos</param>
''' <param name="max">El máximo de mensajes a devolver (entre 100 y 600,
por defecto 400)</param>
''' <returns>Un DataTable con los mensajes hallados</returns>
''' <remarks></remarks>
''' <fecha>29/Dic/2005</fecha>
Public Shared Function MensajesForo( _
ByVal desde As String, _
ByVal hasta As String, _
Optional ByVal max As Integer = 400) As DataTable
'
Dim cnn As SqlConnection = Nothing
Dim dt As New DataTable
'
' Dentro de un Try/Catch por si se produce un error
Try
If max > 600 OrElse max < 100 Then max = 400
Nos vemos.
Guillermo
Es el mostrado anteriormente.
El código para C#
Este es el código para asignar las cadenas de las fechas según la cultura actual:
string s;
s =
System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDateP
attern;
string desde = DateTime.Now.ToUniversalTime().Subtract(new TimeSpan(15,
0, 0, 0)).ToString(s);
string hasta = DateTime.Now.ToUniversalTime().ToString(s);
/// <summary>
/// Obtener los registros de una tabla entre dos fechas.
/// </summary>
/// <param name="desde">Fecha desde la que queremos los datos</param>
/// <param name="hasta">Fecha hasta la que queremos los datos</param>
/// <param name="max">El máximo de mensajes a devolver (entre 100 y 600,
por defecto 400)</param>
/// <returns>Un DataTable con los mensajes hallados</returns>
/// <remarks></remarks>
/// <fecha>29/Dic/2005</fecha>
public static DataTable MensajesForo(string desde,
string hasta,
int max)
{
//
SqlConnection cnn = null;
DataTable dt = new DataTable();
//
// Dentro de un Try/Catch por si se produce un error
try
{
if( max > 600 || max < 100 ) max = 400;