27/03/2011, 14:03
|
| | Fecha de Ingreso: febrero-2011
Mensajes: 10
Antigüedad: 13 años, 10 meses Puntos: 2 | |
APORTE Programa que saca diferencias de fechas con código fuente Este es un programa que te pide una fecha y te devuelve que día cae y cuantos días han pasado o faltan. Funciona con fechas desde -2.000.000.000 a 2.000.000.000.
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)
}
}
Última edición por Yackpott; 29/03/2011 a las 14:02
Razón: Poner link.
|