Saturday, August 19, 2006

Primer y ultimo Sabado de Julio

Cuando empecer a trabajar con Delphi 7, hace como 2 años, en mi escuela se usaba mucho un programa llamado Trucomania, una bases de datos que incluia entre muchas cosas un algoritmo para saber el dia de la semana mediante una fecha dada, un algoritmo interesante, al que nunca le preste atención, y paso el tiempo y paso, y en la plataforma .net aprendi una forma de hacerlo mas sencillo:

Dim d31 As New DateTime(2006, 7, 1)

msgbox(d31.dayofweek.tostring)

La clase Date, DateTime y TimeSpan, encapsulan una serie de algoritmos como el que mencionaba arriba, que nos permiten un desarrollo muy rapido, ejemplo de esto lo tenemos en el siguiente algoritmo: Que permite obtener la fecha del primer (martes,lunes,etc) y ultimo (etc). Esto esta hecho a la tremenda pero segun mi calendario esta bien.

Dim d31 As New DateTime(2006, 7, 1) 'Ponemos la fecha el primero 'de Julio

Dim diapredeterminado As DayOfWeek = DayOfWeek.Saturday 'Primer ....

Select Case d31.DayOfWeek

Case diapredeterminado

Me.TextBox2.Text = d31.Date.ToString Beep()

Case Else

Dim intervalo As New TimeSpan(1, 0, 0, 0)

While True

d31 += intervalo

If d31.DayOfWeek = diapredeterminado Then

Exit While

End If

End While

Me.TextBox2.Text = d31.Date.ToString

End Select

d31 = New DateTime(2006, 7, 31)'Ponemos la fecha el 31 de Julio Select Case d31.DayOfWeek

Case diapredeterminado

Me.TextBox2.Text &= d31.Date.ToString Beep()

Case Else

Dim intervalo As New TimeSpan(1, 0, 0, 0)

While True d31 -= intervalo

If d31.DayOfWeek = diapredeterminado Then

Exit While

End If

End While 'Ultimo .....

Me.TextBox2.Text &= d31.Date.ToString

End Select

El resultado se muestra en un textbox, gracias a DateTime, no nos tenemos que preocupar si es bisiesto o no, ya que ese tipo de comprobaciones y algoritmos forman parte del tipo. Gracias BCL!!!

4 comments:

emiaj said...

logre una forma simplificada d tu metodo...se podria abstraer para llevarla a una clase...
salu2

Dim flagPrimerSabado As New DateTime(2006, 2, 1)
Dim flagUltimoSabado As New DateTime(2006, 2, 28)
Dim sabado As Integer = Convert.ToInt32(DayOfWeek.Saturday)
Dim primerSabado As Integer = sabado - Convert.ToInt32(flagPrimerSabado.DayOfWeek)
Dim ultimoSabado As Integer = sabado - Convert.ToInt32(flagUltimoSabado.DayOfWeek)
If primerSabado < 0 Then primerSabado *= -1
If ultimoSabado < 0 Then ultimoSabado *= -1
MessageBox.Show(flagPrimerSabado.AddDays(primerSabado).ToString())
MessageBox.Show(flagUltimoSabado.AddDays(ultimoSabado).AddDays(-7).ToString())

Horacio N. Hdez. said...

emiaj:

Antes que nada gracias por dejar un comentario, ya me estaba preguntando si alguien se molestaba en leer esta pagina, definitivamente mas sencillo, son 8lineas contra 31!!!
Claro que se puede encapsular en una clase, para operaciones con fechas ;-)

emiaj said...

jeje si vieras kuantos entra a mi blog (none, nada, cero) :D sera porke no skribo naaa :) , bueno siempre veo blogs d x aki y alla pero rara vez dejo mensajes, asi ke si no te dejan komentarios no significa ke no te lean...felicitaciones por tu blog ta entretenido...salu2...bytes

Horacio N. Hdez. said...

emiaj:

Gracias, puedes seguir visitandolo, jajja nos vemos,

pd: dime tu blog?