Package lib.util

Source Code of lib.util.Date

package lib.util;

import java.io.Serializable;
import java.util.Calendar;
import java.util.GregorianCalendar;

import lib.exceptions.InvalidDateException;


public class Date implements Serializable {
  private int dia;

  private int mes;

  private int ano;

  public Schedule horario;

  /**
   * Representa o formato dd/mm/aaaa
   */
  public static final int FORMATO1 = 1;

  /**
   * Representa o formato dd/mm/aaaa:hh:mi:ss
   */
  public static final int FORMATO2 = 2;

  /**
   * Representa o formato ddmmaaaa
   */
  public static final int FORMATO3 = 3;

  /**
   * Representa o formato ddmmaaaahhmiss
   */
  public static final int FORMATO4 = 4;

  /**
   * Representa o formato dd/mm/aaaa com base no aaaa/mm/dd
   */
  public static final int FORMATO5 = 5;

  public Date(int dia, int mes, int ano) throws InvalidDateException {
    this.dia = dia;
    this.mes = mes;
    this.ano = ano;
    this.horario = null;

    validaData(dia, mes, ano);
  }

  public Date(int segundo, int minuto, int hora, int dia, int mes, int ano)
      throws InvalidDateException {
    try {
      this.dia = dia;
      this.mes = mes;
      this.ano = ano;
      horario = new Schedule(segundo, minuto, hora);

      validaData(dia, mes, ano);
    } catch (InvalidDateException e) {
      throw new InvalidDateException(dia, mes, ano);
    }

  }

  public Date(String diaStr, String mesStr, String anoStr) throws InvalidDateException {
    try {
      this.dia = Integer.parseInt(diaStr);
      this.mes = Integer.parseInt(mesStr);
      this.ano = Integer.parseInt(anoStr);
      this.horario = null;
    } catch (Exception e) {
      throw new InvalidDateException(dia, mes, ano);
    }

    validaData(dia, mes, ano);
  }

  public Date(String segundoStr, String minutoStr, String horaStr, String diaStr, String mesStr,
      String anoStr) throws InvalidDateException {
    try {
      this.dia = Integer.parseInt(diaStr);
      this.mes = Integer.parseInt(mesStr);
      this.ano = Integer.parseInt(anoStr);
      this.horario = new Schedule(Integer.parseInt(segundoStr), Integer.parseInt(minutoStr),
          Integer.parseInt(horaStr));
    } catch (Exception e) {
      throw new InvalidDateException(dia, mes, ano);
    }

    validaData(dia, mes, ano);
  }

  public static void addDias(Date data, int dias) {
    Date novaData;

    novaData = data;

    while (dias > 0) {
      novaData = novaData.proximaData();
      dias = dias - 1;
    }

    data.dia = novaData.dia;
    data.mes = novaData.mes;
    data.ano = novaData.ano;
    data.horario = novaData.horario;
  }

  /**
   * Decrementa a data
   */
  public Date anteriorData() {
    Date dataRetorno = null;
    int tag;
    int monat;
    int jahre;

    if (dia > 1) {
      tag = dia - 1;
      monat = mes;
      jahre = ano;
    } else if (dia == 1 && (mes != 1)) {
      tag = numeroDeDiasDoMes(mes - 1);
      monat = mes - 1;
      jahre = ano;
    } else {
      tag = 31;
      monat = 12;
      jahre = ano - 1;
    }

    try {
      dataRetorno = new Date(tag, monat, jahre);
    } catch (InvalidDateException die) {
    }

    return dataRetorno;
  }

  public int compara(Date data) {
    int retorno = 0;

    if (ano > data.getAno()) {
      retorno = 1;
    } else if (ano < data.getAno()) {
      retorno = -1;
    } else {
      if (mes > data.getMes()) {
        retorno = 1;
      } else if (mes < data.getMes()) {
        retorno = -1;
      } else {
        if (dia > data.getDia()) {
          retorno = 1;
        } else if (dia < data.getDia()) {
          retorno = -1;
        }
      }
    }

    return retorno;
  }

  public static int diferencaEmDias(Date dtIni, Date dtFim) {
    int diferenca = 0;

    while (dtIni.compara(dtFim) != 0) {
      dtIni = dtIni.proximaData();
      diferenca++;

      // ////$System.out.println(format(dtIni,1)+"--"+diferenca);
    }

    return diferenca;
  }

  /**
   * Defini��o do M�todo
   *
   *
   * @param data
   *
   * @return
   */
  public long diferencaEmSegundos(Date data) {
    int segundo2, minuto2, hora2, dia2, mes2, ano2;
    int segundo1, minuto1, hora1;
    int diferSegundo, diferMinuto, diferHora, diferDia, diferMes, diferAno;
    Schedule horario2;
    long diferenca = 0;

    horario2 = data.getHorario();
    dia2 = data.getDia();
    mes2 = data.getMes();
    ano2 = data.getAno();

    if (horario2 != null) {
      segundo2 = horario2.getSegundo();
      minuto2 = horario2.getMinuto();
      hora2 = horario2.getHora();
    } else {
      segundo2 = 0;
      minuto2 = 0;
      hora2 = 0;
    }

    if (horario != null) {
      segundo1 = horario.getSegundo();
      minuto1 = horario.getMinuto();
      hora1 = horario.getHora();
    } else {
      segundo1 = 0;
      minuto1 = 0;
      hora1 = 0;
    }

    diferSegundo = segundo2 - segundo1;
    diferMinuto = minuto2 - minuto1;
    diferHora = hora2 - hora1;
    diferDia = dia2 - dia;
    diferMes = mes2 - mes;
    diferAno = ano2 - ano;
    diferenca = (diferSegundo + 60 * (diferMinuto + 60 * (diferHora + 24 * (diferDia + 30 * (diferMes + 12 * diferAno)))));

    return diferenca;
  }

  /**
   * Defini��o do M�todo
   *
   *
   * @return
   */
  public boolean ehFinalDeSemana() {
    Date data = null;

    try {
      data = new Date(dia, mes, ano);
    } catch (Exception e) {
    }

    return ehFinalDeSemana(data);
  }

  /**
   * Verifica se a Date passada � umfinal de semana.
   */
  public static boolean ehFinalDeSemana(Date data) {
    GregorianCalendar calendar = new GregorianCalendar();
    int diaDaSemana = 0;
    boolean retorno = false;

    calendar.set(data.getAno() - 1900, data.getMes(), data.getDia());

    // calendar.setTime(new Date(data.getAno()-1900,data.getMes(),data.getDia()));
    // calendar.setTime(new Date());
    diaDaSemana = calendar.get(Calendar.DAY_OF_WEEK);

    // ////$System.out.println(diaDaSemana);
    if (diaDaSemana == Calendar.SUNDAY || diaDaSemana == Calendar.SATURDAY) {
      retorno = true;
    }

    return retorno;
  }

  /**
   * Defini��o do M�todo
   *
   *
   * @param formato
   *
   * @return
   */
  public String format(int formato) {
    return format(this, formato);
  }

  /**
   * Retorna a representa��o string da data,
   * recebe como par�metro um constante inteira que representa
   * o formato data
   */
  public static String format(Date data, int formato) {
    String diaStr = "", mesStr = "", anoStr = "";
    String texto = "";
    Schedule horario;

    try {
      horario = data.getHorario();
      diaStr = String.valueOf(data.getDia());
      mesStr = String.valueOf(data.getMes());
      anoStr = String.valueOf(data.getAno());

      if (diaStr.length() < 2) {
        diaStr = "0" + diaStr;
      }

      if (mesStr.length() < 2) {
        mesStr = "0" + mesStr;
      }

      for (int i = anoStr.length(); i < 4; i++) {
        anoStr = "0" + anoStr;
      }

      switch (formato) {

      case (FORMATO1):
        texto = diaStr + "/" + mesStr + "/" + anoStr;

        break;

      case (FORMATO2):
        texto = diaStr + "/" + mesStr + "/" + anoStr;
        texto += ":" + horario.format(Schedule.FORMATO1);

        break;

      case (FORMATO3):
        texto = diaStr + mesStr + anoStr;

        break;

      case (FORMATO4):
        texto = diaStr + mesStr + anoStr;
        texto += horario.format(Schedule.FORMATO2);

        break;

      case (FORMATO5):
        texto = diaStr + "/" + mesStr + "/" + anoStr;

        break;

      default:
        texto = null;

        break;
      }
    } catch (NumberFormatException nb) {
    }

    return texto;
  }

  /**
   * Defini��o do M�todo
   *
   *
   * @return
   */
  public int getAno() {
    return ano;
  }

  /**
   * Defini��o do M�todo
   *
   *
   * @return
   */
  public int getDia() {
    return dia;
  }

  /**
   * Defini��o do M�todo
   *
   *
   * @return
   */
  public Schedule getHorario() {
    return horario;
  }

  /**
   * Defini��o do M�todo
   *
   *
   * @return
   */
  public int getMes() {
    return mes;
  }

  /**
   * Retorna o n�mero de dias do m�s passado como par�metro.
   */
  private int numeroDeDiasDoMes(int mes) {
    int retorno = -1;
    GregorianCalendar calendar = new GregorianCalendar();

    switch (mes) {

    case 1:
      retorno = 31;

      break;

    case 2:
      if (calendar.isLeapYear(ano)) {
        retorno = 29;
      } else {
        retorno = 28;
      }

      break;

    case 3:
      retorno = 31;

      break;

    case 4:
      retorno = 30;

      break;

    case 5:
      retorno = 31;

      break;

    case 6:
      retorno = 30;

      break;

    case 7:
      retorno = 31;

      break;

    case 8:
      retorno = 31;

      break;

    case 9:
      retorno = 30;

      break;

    case 10:
      retorno = 31;

      break;

    case 11:
      retorno = 30;

      break;

    case 12:
      retorno = 31;
    }

    return retorno;
  }

  /**
   * Incrementa a Date
   */
  public Date proximaData() {
    Date dataRetorno = null;
    int tag;
    int monat;
    int jahre;

    if (dia < this.numeroDeDiasDoMes(mes)) {
      tag = dia + 1;
      monat = mes;
      jahre = ano;
    } else if (dia == this.numeroDeDiasDoMes(mes) && (mes != 12)) {
      tag = 1;
      monat = mes + 1;
      jahre = ano;
    } else {
      tag = 1;
      monat = 1;
      jahre = ano + 1;
    }

    try {
      dataRetorno = new Date(tag, monat, jahre);
    } catch (InvalidDateException die) {
    }

    return dataRetorno;
  }

  /**
   * Transforma string em data.
   * recebe como par�metro o String e assume
   * / como o separador utilizado.
   */
  public static Date stringToData(String dataStr, int formato) throws InvalidDateException {
    String diaStr, mesStr, anoStr;
    String minutoStr, segundoStr, horaStr;
    Date data = null;

    try {
      switch (formato) {

      case (FORMATO1):
        diaStr = dataStr.substring(0, 2);
        mesStr = dataStr.substring(3, 5);
        anoStr = dataStr.substring(6, 10);
        data = new Date(diaStr, mesStr, anoStr);

        break;

      case (FORMATO2):
        diaStr = dataStr.substring(0, 2);
        mesStr = dataStr.substring(3, 5);
        anoStr = dataStr.substring(6, 10);
        horaStr = dataStr.substring(11, 13);
        minutoStr = dataStr.substring(14, 16);
        segundoStr = dataStr.substring(17, 19);
        data = new Date(segundoStr, minutoStr, horaStr, diaStr, mesStr, anoStr);

        break;

      case (FORMATO3):
        diaStr = dataStr.substring(0, 2);
        mesStr = dataStr.substring(2, 4);
        anoStr = dataStr.substring(4, 8);

        break;

      case (FORMATO4):
        diaStr = dataStr.substring(0, 2);
        mesStr = dataStr.substring(2, 4);
        anoStr = dataStr.substring(4, 8);
        horaStr = dataStr.substring(8, 10);
        minutoStr = dataStr.substring(10, 12);
        segundoStr = dataStr.substring(12, 14);
        data = new Date(segundoStr, minutoStr, horaStr, diaStr, mesStr, anoStr);

        break;

      case (FORMATO5):
        anoStr = dataStr.substring(0, 4);
        mesStr = dataStr.substring(5, 7);
        diaStr = dataStr.substring(8, 10);
        data = new Date(diaStr, mesStr, anoStr);

        break;

      default:
        data = null;

        break;
      }
    } catch (Exception nb) {
      throw new InvalidDateException(dataStr);
    }

    return data;
  }

  /**
   * Valida uma data (dia, mes e ano), caso algum dos valores seja
   * inv�lido, lan�a a exce��o InvalidDateException
   */
  private void validaData(int dia, int mes, int ano) throws InvalidDateException {
    if (1 == 2) {
      throw new InvalidDateException(dia, mes, ano);
    }
  }

  public String toString() {
    return dia + "/" + mes + "/" + ano;
  }

  public static void main(String args[]) {
    try {
      Calendar agora = Calendar.getInstance();
      Date d = new Date(agora.get(Calendar.DAY_OF_MONTH), agora.get(Calendar.MONTH), agora
          .get(Calendar.YEAR));
      System.out.println(d.toString());
    } catch (Exception ex) {
      System.out.println(ex.getMessage());
    }
  }

}
TOP

Related Classes of lib.util.Date

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.