Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-01-2011
ekstase ekstase is offline
Miembro
 
Registrado: sep 2007
Posts: 23
Poder: 0
ekstase Va por buen camino
Smile Determinar mes a partir de una fecha

Hola amigos. Otra vez necesito su ayuda. Utilizo delphi 7 y Mysql, la consulta es la siguiente: De una fecha necesito determinar a cual mes corresponde por ejemplo:

03/01/2011 = Enero
02/04/2011 = Abril
Etc..

Pero esto me gustaria hacerlo con funciones de delphi, dado que tomo la fecha de una Datetimepicker. Desde ya Muchas Gracias.-
Y perdon si no estoy en el foro correcto es que no encontre donde más. Graicas.
Responder Con Cita
  #2  
Antiguo 04-01-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola ekstase.

Podrías hacer una función que lo devuelva:
Código Delphi [-]
uses DateUtils;

function NombreDelMes(ADate: TDate): string;
const
   MESES: array[1..12] of string=('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio', 
                                 'Agosto','Septiembre','Octubre','Noviembre','Diciembre');
begin
  Result:= MESES[MonthOf(ADate)];
end;

Una llamada de ejemplo:
Código Delphi [-]
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
  ShowMessage(NombreDelMes(DateTimePicker1.Date));
end;

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 04-01-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Bueno, si eres como yo que no entiendes bien las funciones que los maestros nos ponen de ejemplo entonces nos buscamos la manera de no usarlas y generar lo mismo sin estas.
Código Delphi [-]
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
meses: array[1..12] of string=('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio',
                                 'Agosto','Septiembre','Octubre','Noviembre','Diciembre');

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DateTimePicker1Change(Sender: TObject);
var
  a: string;
begin
  a:= FormatDateTime('m',Datetimepicker1.Date);
  Label1.Caption:= meses[StrToInt(a)];
end;

end.
Saludos
__________________
Siempre Novato

Última edición por Caral fecha: 03-02-2011 a las 01:07:39.
Responder Con Cita
  #4  
Antiguo 04-01-2011
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 916
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Para que inventar la rueda amigos...

Ya existen los vectores que contienen los nombres de los meses, estan en la unit SysUtils.

Código Delphi [-]
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
      ShowMessage(SysUtils.ShortMonthNames[ MonthOf(DateTimePicker1.Date) ]); //Ene, Feb, Mar
      ShowMessage(SysUtils.LongMonthNames[ MonthOf(DateTimePicker1.Date) ]); //Enero, Febrero, ...
end;

Saludos cordiales
Responder Con Cita
  #5  
Antiguo 04-01-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
algo un poco más simple talvez :
Código Delphi [-]
    ShowMessage(FormatDateTime('mmmm', mi_variable_fecha))

Nota: El único inconveniente es que este código depende de la configuración regional y de idiomas configuradas en el sistema. Si por ejemplo un usuario tiene configurado Inglés (EEUU) entonces los nombre de los meses apareceran en Inglés. Para solucionar esto es necesario pasar una variable de tipo TDatetimeSettings en el último parámetro de la función FormatDateTime.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #6  
Antiguo 04-01-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Bueno, no se, pero a mi no me va este ejemplo.
Me dice que no he declarado MonthOf.
Me da la impresion de que es por el Delphi 6 que uso.
Por si las dudas, si he declarado SysUtils.
Que hago mal?
Saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 04-01-2011
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 916
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Puede ser lo que tu dices...

Yo tengo el D2007...La función MonthOf, esta en la unit DateUtils.

Saludos
Responder Con Cita
  #8  
Antiguo 04-01-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Entonces asumo que en delphi 7 que es el que usa ekstase tampoco funcionara, osea: Seguiremos inventando la rueda.
Lo que da la impresion es de que a la hora de preguntar se va a tener que tener en cuenta que delphi se usa ya que si que varian las cosas.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #9  
Antiguo 04-01-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Cita:
Empezado por Caral Ver Mensaje
Hola
Entonces asumo que en delphi 7 que es el que usa ekstase tampoco funcionara, osea: Seguiremos inventando la rueda.
Lo que da la impresion es de que a la hora de preguntar se va a tener que tener en cuenta que delphi se usa ya que si que varian las cosas.
Saludos
Rectifico ya que no leí bien y ahora mecionaste la unidad adecuada:
NO DEPENDE en este caso del delphi, la unidad no es sysutils, es DateUtils, liguera diferencia.
El codigo SI funciona.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #10  
Antiguo 04-01-2011
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 916
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Amigo Caral, al parecer no comprendiste bien...

Yo dije

Cita:
Ya existen los vectores que contienen los nombres de los meses, estan en la unit SysUtils
En ningun momento hago referencia a la funcion MonthOf, que como te indico esta en otra unidad.

Saludos
Responder Con Cita
  #11  
Antiguo 04-01-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Si amigo, pero si no dices que se necesita colocar la unidad DateUtils el codigo que pusiste no funciona.
Hay que declarar en el USES la unidad DateUtils, de lo contrario da el error que mencione.
Me estoy refiriendo al codigo que pusiste nada mas.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #12  
Antiguo 04-01-2011
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 916
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Ta bien...te concedo el comentario...

Código Delphi [-]
Uses ...SysUtils, DateUtils;
...
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
      ShowMessage(SysUtils.ShortMonthNames[ MonthOf(DateTimePicker1.Date) ]); //Ene, Feb, Mar
      ShowMessage(SysUtils.LongMonthNames[ MonthOf(DateTimePicker1.Date) ]); //Enero, Febrero, ...
end;

Esta bien así Caralsito...
Responder Con Cita
  #13  
Antiguo 04-01-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Si amigo, por eso es que siempre digo que vosotros los maestros colocais las cosas como si nosotros los novatos supieramos de esto.
Ahora si, hasta yo lo entiendo.
Gracias por la aclaracion.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #14  
Antiguo 04-01-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

En Delphi 7 la opción de cloayza funciona bién, pero me sucede algo raro con ShowMessage:
Código Delphi [-]
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
  ShowMessage(SysUtils.LongMonthNames[MonthOf(DateTimePicker1.Date) ]); 
end;
Desplegado el DateTimePicker, al hacer click sobre la flecha para avanzar el més, muestra el cuadro de dialogo con el nombre del mes y luego de aceptar entra en ciclo infinito...

No sucede lo mismo si:
Código Delphi [-]
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
  Caption:= SysUtils.LongMonthNames[MonthOf(DateTimePicker1.Date) ]
end;
O si se edita el mes por teclado.

Supongo que al aceptar el cuadro de diálogo vuelve al DateTimePicker, disparando nuevamente el evento OnChange. Voy a investigarlo...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #15  
Antiguo 04-01-2011
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 916
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Ahora he probado el codigo y por lo menos en D2007, no parecer comportarce en mala forma.

Tendrias que investigar y nos cuentas.

Saludos
Responder Con Cita
  #16  
Antiguo 04-01-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
A mi me paso lo mismo, pero no lo comente.
Me parece que es lo que dice ecfisa, el control regresa al datetimepicker y se hace el ciclo, por lo menos en el caso del mensaje.
Lo curioso es que no le pase a cloayza, para mi que el delphi 2007 viene con trampa
Saludos
__________________
Siempre Novato
Responder Con Cita
  #17  
Antiguo 04-01-2011
ekstase ekstase is offline
Miembro
 
Registrado: sep 2007
Posts: 23
Poder: 0
ekstase Va por buen camino
Solucionado.

Hola amigos, desde ya les agradezco por la valiosa ayuda que me dieron, eh probado la solución de Cloayza y en mi caso funciona perfecto, pero me he quedado con la solución de Chris por el simple hecho de que no tuve que agregar ninguna biblioteca. Gracias nuevamente me sacaron de un gran apuro.
Responder Con Cita
  #18  
Antiguo 05-01-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por cloayza Ver Mensaje
Ahora he probado el codigo y por lo menos en D2007, no parecer comportarce en mala forma.

Tendrias que investigar y nos cuentas.

Saludos
En las pruebas con Trace into nunca sale del evento OnChange. También probé con MessageBox y MessageDlg con el mismo resultado.

La sola llamada a un diálogo modal lo provoca:
Código Delphi [-]
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
  MessageBox(Handle,'','',MB_OK); // con este da un lindo efecto cascada ...
end;

Busqué en la web y está reportado como un bug en [ embarcadero ].

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 05-01-2011 a las 18:26:47.
Responder Con Cita
  #19  
Antiguo 05-01-2011
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 916
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Debo reafirmar lo que dije, no logro reproducir el error que tu comentas.

Las plataformas donde esta reportado el error es
Cita:
Platform: 95, 98, 2000, NT, XP
Mi entorno es Windows 7, Delphi 2007.

Talvez por ahi va la cosa...
Saludos.
Responder Con Cita
  #20  
Antiguo 05-01-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

No lo dudé en ningún momento cloayza, estoy seguro que lo has probado bién. Era sólo para comentar lo que había encontrado sobre el caso.

Yo tengo Windows Vista y Delphi 7, me parece que más que el S.O. es la versión de Delphi...

Habría que ver otras conbinaciones para determinar con seguridad quién es el causante. Pero al menos ya sabemos que existe
en Delphi 6(Caral), Delphi 7 y hasta la versión Vista del S.O.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 05-01-2011 a las 18:56:27.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como determinar si X Fecha esta en Hor. Verano pero en firebird???? AGAG4 Firebird e Interbase 1 05-04-2008 22:17:33
Fecha a partir de un string johurgi Varios 4 18-12-2007 13:03:48
Determinar fecha de determinado dia de la semana Roilo PHP 2 12-11-2007 22:43:12
Ayuda, Como calcular fecha de vencimiento mensual a partir de una fecha x en delphi Renis Impresión 4 23-08-2007 23:45:14
Genrar registros a partir de una fecha y numero mosorio Firebird e Interbase 2 05-11-2004 09:40:16


La franja horaria es GMT +2. Ahora son las 22:09:16.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi