elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Comprobar la hora en java
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Comprobar la hora en java  (Leído 3,922 veces)
Zoik

Desconectado Desconectado

Mensajes: 91


Ver Perfil
Comprobar la hora en java
« en: 28 Agosto 2013, 16:05 pm »

Bien tengo una duda, quería hacer un programa en el cual a la 1 de la mañana me apagase el ordenador por temas de ahorrar luz.

Bien esto ya esta echo, lo e echo con un bucle que me comprueba constantemente que hora es, y en el momento que la hora se pone a 1, me sale del bucle y me inicializa el apagado, simple.

El problema que tengo es el siguiente, en el momento que me empieza el bucle me consume demasiados recursos, y me gustaría saber si hay algún método para poder comprobar la hora constantemente sin necesidad de gastar tanta máquina.

Un saludo y gracias de antemano.


En línea

Juan.

Desconectado Desconectado

Mensajes: 85



Ver Perfil
Re: Comprobar la hora en java
« Respuesta #1 en: 28 Agosto 2013, 16:15 pm »

Claro que lo hay:

Tread.sleep(3600000);

Cada hora comprobará que hora es y ahorrará recursos


En línea

1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: Comprobar la hora en java
« Respuesta #2 en: 28 Agosto 2013, 16:59 pm »

Claro que lo hay:

Tread.sleep(3600000);

Cada hora comprobará que hora es y ahorrará recursos

Pero por ejemplo y si el programa inicia a las 11:30 a las 12:30 volverá a comprobar y de ahí hasta la 1:30 xD.
En línea

abc
1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: Comprobar la hora en java
« Respuesta #3 en: 28 Agosto 2013, 19:12 pm »

Me pareció interesante y me dediqué a tirar código un rato xD

Código
  1. /*
  2.  * Autor: 1mpuls0
  3.  */
  4. package basic;
  5.  
  6. import java.util.Calendar;
  7. import java.text.SimpleDateFormat;
  8. import java.util.Date;
  9. import java.text.DateFormat;
  10. import java.text.ParseException;
  11. import java.lang.Thread;
  12.  
  13. public class CheckTime {
  14.    public static void main(String args[]) {
  15.        Date currentDate = getCurrentDate();
  16.        Date lastDate = stringToDate("2013-08-28 12:10:20");
  17.        long diff = differenceTime(currentDate, lastDate);
  18.        System.out.println(currentDate);
  19.        System.out.println(lastDate);
  20.        System.out.println(diff);
  21.        new ThreadShutdown(diff).run();
  22.    }
  23.  
  24.    public static long differenceTime(Date currentDate, Date lastDate) {
  25.        long msDifference = 0;
  26.        long msCurrentDate = currentDate.getTime();
  27.        long msLastDate = lastDate.getTime();
  28.        if(msLastDate>msCurrentDate)
  29.            msDifference = Math.abs(msCurrentDate - msLastDate);
  30.        return msDifference;
  31.    }
  32.  
  33.    public static Date getCurrentDate() {
  34.        String currentDate;
  35.        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  36.        Date date = new Date();
  37.        currentDate = dateFormat.format(date);
  38.        try {
  39.            dateFormat.parse(currentDate);
  40.        } catch (ParseException ex) {
  41.            ex.printStackTrace();
  42.        }
  43.        return date;
  44.    }
  45.  
  46.    public static Date stringToDate(String strDate) {
  47.        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  48.        Date date = null;
  49.        try {
  50.            date = format.parse(strDate);
  51.        } catch (ParseException ex) {
  52.            date = getCurrentDate();
  53.        }
  54.        return date;
  55.    }
  56. }
  57.  
  58. class ThreadShutdown implements Runnable {
  59.    private final Thread thread;
  60.    private long time = 0;
  61.  
  62.    public ThreadShutdown(long time) {
  63.        this.time = time;
  64.        thread = new Thread(this);
  65.        thread.start();
  66.    }
  67.  
  68.    private void process() {
  69.        System.out.println("APAGATE!!!");
  70.    }
  71.  
  72.    public void run() {
  73.        try {
  74.            thread.sleep(time);
  75.            process();
  76.        }
  77.        catch (InterruptedException ie) {
  78.            System.out.println("Error: "+ie);
  79.        }
  80.    }
  81. }
  82.  

Solo hacen falta un par de validaciones pero ya depende de que deseas que haga, por ejemplo cuando llegue a escribir la fecha de apagado menor a la fecha y hora actual.


Espero que te funcione.

Saludos.
« Última modificación: 3 Septiembre 2015, 18:59 pm por 1mpuls0 » En línea

abc
Zoik

Desconectado Desconectado

Mensajes: 91


Ver Perfil
Re: Comprobar la hora en java
« Respuesta #4 en: 28 Agosto 2013, 21:46 pm »

Bueno en media hora que e podido sacar me a salido esto, esto es lo que yo queria, esta un poco guarro, pero bueno ya lo pulire cuando tenga tiempo.

Muchas gracias a los dos, que bonito es tu codigo Darhius xD.

Código:
package main;

import graphicinterface.Interface;

import javax.swing.SwingUtilities;

import protocols.Timer;

public class Main {

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){  
            public void run(){
             new Timer();
                new Interface();
            }  
        });  
}

}

Código:
package protocols;

import java.util.Calendar;

public class Timer {
public Timer(){
protocolOfHour();
}

public boolean protocolOfHour(){
Calendar calendario = Calendar.getInstance();
int hora;
do{
try {
Thread.sleep(100000);
} catch (InterruptedException e) {
e.printStackTrace();
}
hora =calendario.get(Calendar.HOUR_OF_DAY);
}while(hora!=1);
return true;
}
}

Código:
package protocols;

import java.io.IOException;

public class Protocol {

public Protocol(){
exec("REG ADD HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /v ShutdownProgramado /t REG_SZ /f /d 'C:\\Users\\Zoik\\Documents\\shutdown.jar'");
exec("shutdown -p -f");
}

private void exec(String cmd) {
try {
Runtime.getRuntime().exec(cmd);
}
catch (IOException e) {
System.out.println("El apagado a fallado");
}
}
}

Código:
package graphicinterface;

import java.util.Timer;
import java.util.TimerTask;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import protocols.Protocol;

public class Interface extends JFrame{
private static final long serialVersionUID = 1L;
JLabel text = new JLabel("");
JPanel panel = new JPanel();
int segundos = 300;
Timer timer;

public Interface(){
setSize(300,35);
setLocationRelativeTo(null);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
setResizable(false);
setUndecorated(true);
setAlwaysOnTop(true);
setVisible(true);
addLabel();
contador();
}

class RemindTask extends TimerTask {
public void run() {
 segundos--;
 if(segundos < 0){
 text.setText(String.valueOf("El ordenador se apagará en 0 segundos"));
   new Protocol();
 }else{
 text.setText(String.valueOf("El ordenador se apagará en "+segundos+" segundos"));
 }
}
}

private void addLabel(){
panel.setBorder(BorderFactory.createLoweredBevelBorder());
add(panel);
panel.add(text);
}

private void contador(){
timer = new Timer();
 timer.schedule(new RemindTask(),0, 1*1000);
}

}

Un saludo y gracias de nuevo.

EDITO: ¿Como pongo el código con líneas numeradas como tu Darhius?
« Última modificación: 28 Agosto 2013, 21:49 pm por Zoik » En línea

1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: Comprobar la hora en java
« Respuesta #5 en: 28 Agosto 2013, 21:58 pm »

Muchas gracias a los dos, que bonito es tu codigo Darhius xD.

Gracias. Aunque algunas librerías están de más y olvidé borrarlas, es que hice pruebas con Calendar
Voy a mejorarlo y hacer pruebas entre timer y thread para ver cual resulta mejor en cuanto al consumo de recursos.
Después de eso le pondré una interfaz  ;D y postearé el código ya mejorado.

EDITO: ¿Como pongo el código con líneas numeradas como tu Darhius?

Cuando respondes un mensaje hay un select que por default dice GeSHi ahí seleccionas el lenguaje y colocas el código dentro de las etiquetas que saldrán.


En línea

abc
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
CAPTURAR FECHA Y HORA DEL WINDOWS EN JAVA(ejm)....
Java
angelzx 1 6,829 Último mensaje 29 Noviembre 2005, 13:22 pm
por Thor
dudas con uml a la hora de programar en java
Java
rivet 2 2,758 Último mensaje 26 Abril 2012, 14:23 pm
por raul_samp
Comprobar conexion en Java (ping)
Java
juancaa 3 12,157 Último mensaje 11 Julio 2012, 18:40 pm
por adastra
Capturar la hora en java swing
Java
marc85 0 1,719 Último mensaje 16 Octubre 2014, 19:58 pm
por marc85
Cómo comprobar si tu móvil hará el cambio de hora automáticamente
Noticias
wolfbcn 0 1,061 Último mensaje 30 Marzo 2019, 14:00 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines