Podemos hacerlo todo con Java?

Febrero 26th, 2009 by eduk2

El hecho de que Java precise de una interpretación de sus clases por parte de una máquina virtual, lo hace más lento que otros lenguajes compilados directamente ante la máquina desnuda. Aunque las mejoras en las implementaciones Java han ido paliando esto, puede pensarse que nunca podrá competir en velocidad con las aplicaciones nativas compiladas.

Algunos de los problemas que no se pueden manejar actualmente con Java hacen referencia a:

  • Las prestaciones

Problemas críticos de prestaciones. Para ello se requieren aplicaciones nativas o componentes nativos en las aplicaciones Java.

  • Los requisitos

Problemas que implican gran cantidad de memoria o requisitos de entrada/salida.

  • La plataforma

Problemas específicos de la plataforma. Java logra la independencia de la plataforma y para ello no aprovecha las características de los lenguajes nativos. Para intentar solventar este problema existe la librería JNI o lo que es lo mismo, Java Native Interface, que permite mezclar Java y código nativo.

  • La GUI

GUI significa Graphical User Interface. Java tiene una GUI pero su rendimiento es inferior al nativo del propio sistema.

¡Si te ha gustado compartelo!

  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • email
  • LinkedIn
  • Meneame
  • MySpace
  • PDF
  • RSS
  • Technorati
  • Twitter

Clase para manejar java.sql.Time (sumar, restar, etc)

Agosto 26th, 2008 by eduk2

Me he decidido a crear  este post y a comprometerme a mejorar la clase que os presento para el uso de java.sql.Time

A veces tratar con horas es complicado, sobre todo cuando la hora la obtienes de una base de datos y en ocasiones esta hora se ha guardado con la famosa fecha "1970/01/01" o quizás se ha guardado con la fecha actual.

Cuando tienes que operar con estas Horas, te puedes encontrar con resultados no esperados, y es por esto por lo que os presento una clase que os puede ayudar.

Si tiene errores o encontrais alguna mejora por favor avisar.

—- FICHERO MyTime.java —-

import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;

/**
*
* @author Eduardo Jiménez Peña
*/
public class MyTime {

public Time sumarTime(java.sql.Time hora1, java.sql.Time hora2) {
return operacionTime(hora1, hora2, "+");
}

public Time sumarTime(List<java.sql.Time> horas) {
long suma = 0;
for (java.sql.Time hora : horas) {
if (suma == 0) {
suma = hora.getTime();
} else {
suma = operacionMilisegundos(getMilisegundosToTime(suma), hora, "+");
}
}
return getMilisegundosToTime(suma);
}

public Time restarTime(java.sql.Time hora1, java.sql.Time hora2) {
return operacionTime(hora1, hora2, "-");
}

private Time operacionTime(java.sql.Time hora1, java.sql.Time hora2, String operacion) {
long lnMilisegundos = operacionMilisegundos(hora1, hora2, operacion);
return new java.sql.Time(lnMilisegundos);
}

private long operacionMilisegundos(java.sql.Time hora1, java.sql.Time hora2, String operacion) {
long time1 = getMilisegundosDesde1970(hora1);
long time2 = getMilisegundosDesde1970(hora2);

long timeTotal = 0;
if (operacion.equals("+")) {
timeTotal = time1 + time2;
} else if (operacion.equals("-")) {
timeTotal = time1 – time2;
}

java.util.Date utilDate = new java.util.Date("1970/01/01 " + milisegundosToStringHoras(timeTotal));
long lnMilisegundos = utilDate.getTime();
return lnMilisegundos;
}

private long getMilisegundosDesde1970(java.sql.Time hora) {
long returnAux = 0;

//creamos una fecha con la hora que nos pasan y fecha 1970/01/01
java.util.Date fecha = new java.util.Date("1970/01/01 " + hora.toString());

Calendar calendarIn = new GregorianCalendar();
calendarIn.setTime(fecha);
SimpleDateFormat sdf = new SimpleDateFormat();

sdf.applyPattern("HH");
calendarIn.set(Calendar.HOUR_OF_DAY, Integer.parseInt(sdf.format(fecha.getTime())));
sdf.applyPattern("mm");
calendarIn.set(Calendar.MINUTE, Integer.parseInt(sdf.format(fecha.getTime())));
sdf.applyPattern("ss");
calendarIn.set(Calendar.SECOND, Integer.parseInt(sdf.format(fecha.getTime())));

returnAux = calendarIn.getTimeInMillis();

// el java.sql.time hay que sumarle una hora
// ya que java.sql.Time t = new java.sql.Time(0) = 01:00:00
return returnAux + 3600000;
}

private Time getMilisegundosToTime(long milisegundos) {
return new java.sql.Time(milisegundos);
}

private String milisegundosToStringHoras(long milisegundos) {
String auxReturn;
double milisegundosAux = milisegundos;

Float horaD = new Float(milisegundosAux / 3600000);
int hora = Math.round(horaD);

Float restoHora = new Float(milisegundosAux % 3600000);

Float minutoD = restoHora / 60000;
int minuto = minutoD.intValue();

Float restoMinutos = restoHora % 60000;

Float segundosD = restoMinutos / 1000;
int segundos = segundosD.intValue();

auxReturn = hora + ":" + minuto + ":" + segundos;

return auxReturn;
}
}

—- FIN FICHERO MyTime.java —-

En cuanto pueda pongo un enlace para descargar el fichero, aunque lo podeis copiar y pegar tranquilamente.

Ahora os muestro un par de ejemplos de uso de la clase:

MyTime mt = new MyTime();

List<java.sql.Time> horasList = new ArrayList();

horasList.add(hora2);
horasList.add(hora2);
horasList.add(hora2);
System.out.print("3 x " + hora2 + " = ");
System.out.println(mt.sumarTime(horasList));

System.out.println("———–");
System.out.print(hora1 + " + " + hora2 + " = ");
System.out.println(mt.sumarTime(hora1, hora2));

¡Si te ha gustado compartelo!

  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • email
  • LinkedIn
  • Meneame
  • MySpace
  • PDF
  • RSS
  • Technorati
  • Twitter