Tiene todo el código fuente y comentarios de cada parte del programa.
Todo en el archivo [URL="http://www.megaupload.com/?d=MEWFHWU6"]Fecha.jar[/URL]
Código:
/* Por Yackpott * Para ForosDelWeb.com */ import java.awt.*; import java.awt.event.*; class ventanaFecha implements ActionListener,WindowListener{ //Las variables Label label1; Label label2; TextField text1; public ventanaFecha(){ //Ventana frame Frame a = new Frame(); //Ordena la ventana GridBagLayout layout = new GridBagLayout(); GridBagConstraints gbc = new GridBagConstraints(); //Los pixeles a.setSize(220,140); //Para que este centrado a.setLocationRelativeTo(null); //No se pueda agrandar la ventana a.setResizable(false); //No tiene decoración a.setUndecorated(false); //Para que sea visivle a.setVisible(true); //Agrega a frame el ordenador de ventanas (GridBagLayout) a.setLayout(layout); //Un escuchador de ventana para que más adelante se cierre a.addWindowListener(this); //Titulo a.setTitle("Fecha"); //Distancia de los bordes de la ventana con las cosas gbc.weightx = 0.5; gbc.weighty = 0.5; //Posición gbc.gridx = 0; gbc.gridy = 0; //Se agrega el texto a.add(new Label(" Escriba una fecha (DD/MM/AAAA...)"),gbc); //Se crea el expacio para introducir palabras para 16 caracteres text1 = new TextField(16); gbc.weightx = 0.5; gbc.weighty = 0.5; //Posición uno más abajo que el anterior gbc.gridx = 0; gbc.gridy = 1; //Se agrega el textfield a.add(text1,gbc); //Se agrega el escuchador para que al apretar "enter" se obtenga el texto text1.addActionListener(this); //Otro texto label1 = new Label(); gbc.weightx = 0.5; gbc.weighty = 0.5; gbc.gridx = 0; gbc.gridy = 2; //El texto que se va a agregar, lo espacios los puse para poner despues el día de semana label1.setText("Día semana: "); //Se agraga el texto a.add(label1,gbc); label2 = new Label(); gbc.weightx = 0.5; gbc.weighty = 0.5; gbc.gridx = 0; gbc.gridy = 3; //El texto de los días label2.setText("Días: "); //Se agrega el texto a.add(label2,gbc); } public void actionPerformed(ActionEvent evt) { //Obtiene el texto String x = text1.getText(); //Convierte el texto antiguo a nada "null" text1.setText(null); //Contador del arrglo de más abajo int i=0; //Arreglo int[]a=new int[3]; //Aca se le saca al textfield los "/" y se obtiene los numero while(i<2){ String y = x.substring(0,x.indexOf('/')); a[i]=Integer.parseInt(y); x=x.replaceFirst(y,"");x=x.replaceFirst("/",""); i++; } a[2]=Integer.parseInt(x); //LLama a las funciónes que entragan el día de semana y los días y los imprime en la ventana label1.setText("Día semana: "+diaSemana(a[2],a[1],a[0])); label2.setText("Días: "+diaFecha (a[2],a[1],a[0])); } static public String diaSemana(int A1,int M1,int D1){ /*Java acepta meses del 0(Enero)-11(Diciembre), *porlo que al ponerle a 12(Diciembre) un menos *1 que en 11 el cual java lo lee. */ M1 = M1 - 1; //Crea objeto para manejar fechas con los datos indroducidos java.util.GregorianCalendar fecha1 = new java.util.GregorianCalendar(A1,M1,D1); //Lo mismo con la fecha "minima"(porque más adelante se modifica para que no sea la minima) java.util.GregorianCalendar fecha2 = new java.util.GregorianCalendar(1970,0,1); //Fecha en días long ndias = (fecha1.getTimeInMillis()) / (1000 * 60 * 60 * 24); //Arregla un error de un día que se produce cuando la fecha es menor a la fecha mínima if((fecha1.getTimeInMillis())<(fecha2.getTimeInMillis())){ ndias = ndias - 1; } /*Se arregla para que no alla fecha minima ni maxima * aunque en verdad si hay -2.000.000.000 a 2.000.000.000 */ while (ndias<7){ ndias = ndias + 7; } while (ndias>=14){ ndias = ndias - 7; } //Devuelve que dia cae con respecto a la fecha minima la cual es jueves if(ndias%7==4)return "Lunes"; else if(ndias%7==5)return "Martes"; else if(ndias%7==6)return "Miércoles"; else if(ndias%7==0)return "Jueves"; else if(ndias%7==1)return "Viernes"; else if(ndias%7==2)return "Sábado"; else if(ndias%7==3)return "Domingo"; else return "error"; } static public long diaFecha(int A1,int M1,int D1){ //Lo mismo que antes M1 = M1-1; //Objetos para trabajar fechas java.util.GregorianCalendar fecha1 = new java.util.GregorianCalendar(A1,M1,D1); //Nos da la fecha actual en milisegundos. long fecha2 = System.currentTimeMillis(); //Diferencia de la fecha actual y la antigua long diferencia = fecha2 - fecha1.getTimeInMillis(); //Lo convierte a días long dias = diferencia / (1000 * 60 * 60 * 24); //Esto es para arreglar un problema cuando la fecha actual es menor a la "antigua" if(fecha2<fecha1.getTimeInMillis()){ dias = dias - 1; return dias; } else{ return dias; } } //Windows listener, se tienen que implementar todos lo metodos public void windowDeactivated(WindowEvent asd){} public void windowDeiconified(WindowEvent asd){} public void windowIconified(WindowEvent asd){} public void windowActivated(WindowEvent asd){} public void windowOpened(WindowEvent asd){} public void windowClosed(WindowEvent asd){} public void windowClosing(WindowEvent asd){ System.exit(0); //Esto es para que al apretar en signo X la ventana se cierre } static public void main(String[] args){ ventanaFecha vF = new ventanaFecha(); //Crea el objeto ventanaFecha (el unico objeto) } }