22.- Clase Hora

 22.- Clase Hora

import java.util.*;

public class Hora{

    /*La estructura de la clase Hora, con dos atributos que la conforman: h y m */              

    private int h;

    private int m;

          

    public Hora(int hor, int min){

    this.h = hor;

    this.m = min;  

    }

          

    public Hora(){

    this.h = horaActual().h;

    this.m = horaActual().m;//Usamos el metodo horaActual() en el constructor, para no repetir código.       

    }

    

    public int getH(){return this.h;}//devuelve this.h;


    public int getM(){return this.m;}//devuelve this.m;

    

    public void setH(int hor){this.h=hor;}//sustituye this.h por hor

    

    public void setM(int min){this.m = min;}//sustituye this.m por min



    

        

    public boolean esValida(){

        if(this.h >=0&&this.h<=23&&this.m>=0&&this.m<=59)return true;

        else return false;

    }

    

    public  String hora(){

         if(esValida()) {

        String hor = null; String min = null;

        if (this.h < 10 ) hor = "0"+h;else hor = ""+h;        

        if (this.m < 10 ) min = "0"+m;else min = ""+m;

        return "\""+hor+":"+min+"\""+"\t"; 

        }

        else return "Hora no válida";

        

    }

           

       public static Hora horaActual(){

        long seg = System.currentTimeMillis()/1000;        

        seg = seg%(24*60*60);        

        int hor = (int) seg/(60*60);  

        seg = seg -hor*(60*60);

        int min = (int)seg/60;

        hor = hor+2;//2 horas de diferencia horario verano

        Hora hAct = new Hora(hor,min);

        return hAct;

    }

    

    public static Hora valueOf(String hhmm){

    int h1 =(int)(hhmm.charAt(0)-'0');

    int h2 =(int)(hhmm.charAt(1)-'0');

    int m1 =(int)(hhmm.charAt(3)-'0');

    int m2 =(int)(hhmm.charAt(4)-'0');

    Hora hora1 = new Hora(h1*10+h2,m1*10+m2);

    return hora1;

    }

    

    public int aMinutos(){

        if(esValida()){

         int minutos = this.h*60 +this.m;        

         return minutos;}

         else return -1;

    }

    

    public int difMinutos(Hora hora2){//diferencia en minutos entres dos horas

        Scanner t = new Scanner(System.in).useLocale(Locale.US);

        

        Hora hora1 = new Hora(this.h,this.m);

        hora1.aMinutos();

        System.out.println("Introduzca la hora [0..23]");

        h = t.nextInt();

        System.out.println("Introduzca los minutos [0..59]");

        m = t.nextInt();        

        hora2 = new Hora(h,m);

        hora2.aMinutos();

        

        System.out.println(hora2.aMinutos()-hora1.aMinutos());//diferencia en minutos entres dos horas

        return hora2.aMinutos()-hora1.aMinutos();

    }

    

    public  String toString(){ //Constructor horas manualmente

        String hh = null;String mm = null;

        Hora h1 = new Hora(this.h, this.m);

        if(h<=9)hh= 0+""+h1.h;else hh =""+h1.h;

        if(m<=9)mm= 0+""+h1.m;else mm =""+h1.m;

        //System.out.println(hh+":"+mm);

        return hh+":"+mm;

      }

    

    public int compareTo(Hora hora2){

        Scanner t = new Scanner(System.in).useLocale(Locale.US);

        Hora hora1 = new Hora(this.h, this.m);

        System.out.println("Introduzca la hora [0..23]");

        int hora = t.nextInt();

        System.out.println("Introduzca los minutos [0..59]");

        int minutos = t.nextInt();

        hora2 = new Hora(hora, minutos);

        int a = (hora1.toString().compareTo(hora2.toString()));

        System.out.println(a);

        return a;

    }

    

    public boolean equals(Object o){

       return  o instanceof Hora 

        && this.h == ((Hora) o).h

        && this.m == ((Hora) o).m;   

    }    

    

    

    public static void main(String[] arg){//método main para probar

        Scanner t = new Scanner(System.in).useLocale(Locale.US); int opc =0;

        do{

        System.out.println("\t\t\t MENU: ELIJA UNA OPCION");

        System.out.println();

        System.out.println("\t 1.- CONSTRUIR UNA HORA EN FORMATO HORA");

        System.out.println("\t 2.- CONSTRUIR UNA HORA EN FORMATO STRING HH:MM");

        System.out.println("\t 3.- CONVERTIR UNA HORA EN FORMATO HORA A MINUTOS");

        System.out.println("\t 4.- CONVERTIR UNA HORA EN FORMATO STRING A MINUTOS");

        System.out.println("\t 5.- OBTENER LA DIFERENCIA EN MINUTOS DE DOS HORAS EN FORMATO HORA");

        System.out.println("\t 6.- OBTENER LA DIFERENCIA EN MINUTOS DE DOS HORAS EN FORMATO STRING");

        System.out.println("\t 7.- COMPARE DOS HORAS EN FORMATO HORA");

        System.out.println("\t 8.- COMPARE DOS HORAS EN FORMATO STRING");

        System.out.println("\t 9.- HACER UN RELOJ DIGITAL");

        System.out.println("\t 0.- FIN");

        opc = t.nextInt();

       

       switch(opc){

        

        case 1:  System.out.println("Introduzca la hora [0..23]");

                    int h = t.nextInt();

                    System.out.println("Introduzca los minutos [0..59]");

                    int m = t.nextInt();

                    Hora hora1 = new Hora(h,m);

                    if( hora1.esValida())System.out.println(hora1.toString());else System.out.println("Hora no válida");break;

        

        case 2:  System.out.println("Introduzca la hora como un String del formato HH:MM");

                    String hhmm = t.next();                    

                    hora1 = valueOf(hhmm);

                    if(hora1.esValida())System.out.println(hora1.toString());break;

                    

        case 3:  System.out.println("Introduzca la hora [0..23]");

                    h = t.nextInt();

                    System.out.println("Introduzca los minutos [0..59]");//valueOf(String hhmm)

                    m = t.nextInt();

                    hora1 = new Hora(h,m);

                    if( hora1.esValida())System.out.println(hora1.aMinutos());else System.out.println("Hora no válida");break;            

        

        

        case 4:  System.out.println("Introduzca la hora como un String del formato HH:MM");

                    hhmm = t.next();                    

                    hora1 = valueOf(hhmm);

                    if(hora1.esValida())System.out.println(hora1.aMinutos());break;

        

        

        case 5:     int aMinutos1 =0; int aMinutos2=0;

                    System.out.println("Introduzca la hora [0..23]");

                    h = t.nextInt();

                    System.out.println("Introduzca los minutos [0..59]");//valueOf(String hhmm)

                    m = t.nextInt();

                    hora1 = new Hora(h,m);

                    if( hora1.esValida())aMinutos1 = hora1.aMinutos();

                    else System.out.println("Hora no válida");

                    

                    System.out.println("Introduzca la segunda hora [0..23]");

                    h = t.nextInt();

                    System.out.println("Introduzca los minutos de la segunda hora [0..59]");//valueOf(String hhmm)

                    m = t.nextInt();

                    hora1 = new Hora(h,m);

                    if( hora1.esValida()) aMinutos2 = hora1.aMinutos();

                    else System.out.println("Hora no válida");

                    int difMinutos = aMinutos2-aMinutos1;System.out.println(difMinutos);break;

                    

        case 6:     aMinutos1 =0; aMinutos2=0;

                    System.out.println("Introduzca la hora como un String del formato HH:MM");

                    hhmm = t.next();                    

                    hora1 = valueOf(hhmm);

                    if(hora1.esValida()) aMinutos1 = hora1.aMinutos(); 

                     else System.out.println("Hora no válida");

     

                    

                    System.out.println("Introduzca la segunda hora como un String del formato HH:MM");

                    hhmm = t.next();                    

                    hora1 = valueOf(hhmm);

                    if(hora1.esValida()) aMinutos2 = hora1.aMinutos();

                     else System.out.println("Hora no válida");

                    difMinutos = aMinutos2-aMinutos1;System.out.println(difMinutos);break;

        

        case 7:     System.out.println("Introduzca la hora [0..23]");

                    h = t.nextInt();

                    System.out.println("Introduzca los minutos [0..59]");//valueOf(String hhmm)

                    m = t.nextInt();

                    hora1 = new Hora(h,m);

                    if( hora1.esValida())hora1=hora1;

                    else System.out.println("Hora no válida");

                    

                    System.out.println("Introduzca la segunda hora [0..23]");

                    h = t.nextInt();

                    System.out.println("Introduzca los minutos de la segunda hora [0..59]");//valueOf(String hhmm)

                    m = t.nextInt();

                    Hora hora2 = new Hora(h,m);

                    if( hora2.esValida())hora2 = hora2;

                    else System.out.println("Hora no válida");

                    int a = (hora1.toString().compareTo(hora2.toString()));

                    System.out.println(a);break;

                    

        case 8:     System.out.println("Introduzca la hora como un String hh:mm");//valueOf(String hhmm)

                    hhmm = t.next();

                    hora1 = valueOf(hhmm);

                    if( hora1.esValida())hora1=hora1;

                    else System.out.println("Hora no válida");

                    

                    System.out.println("Introduzca la segunda hora como un String hh:mm");

                    hhmm = t.next();

                    hora2 = valueOf(hhmm);

                    if( hora2.esValida())hora2 = hora2;

                    else System.out.println("Hora no válida");

                    a = (hora1.toString().compareTo(hora2.toString()));

                    System.out.println(a);break;

                    

        case 9:     while(horaActual().h <25){//con esto producimos un bucle infinito que nos permite tener como un reloj con la hora "hh:mm:ss";

                                //podríamos hacer que el bucle terminase en una hora determinada.                        

                        System.out.println("\t\t"+horaActual().toString()+"\f");

                    }

                    ;break;

       

       

        case 0:     System.out.println("Acabé. Hasta pronto");System.exit(0);break;

       

        }            

            

    }while(opc>=0&&opc <=9);       

        }

    }


    

Comentarios