[Resolvido] Duvida simples com Data

16 respostas
U

Não me lembro como faz para acrescentar hora em uma data.

// **********************************************
// Classe do Objeto

private Date data; //  esta no formato dd/MM/yyyy
private Date time; //  esta no formato HH:mm:ss

// **********************************************
// Classe onde recebe o Objeto

Objeto entidade = new Objeto();

Date dataHora = new Date();

// agora aqui quero juntar a data com a hora para atribuir o resultado na variável dataHora.
// como se fosse fazer uma soma

dataHora = entidade.getData() + entidade.getHora();


// se minha data for = 10/12/2012
// hora = 10:16:51
// quero que o dataHora fique = 10/12/2012 10:16:51

Espero que alguém pode me ajudar

16 Respostas

Rodrigo_Sasaki

Use a API de Calendar, o método add resolve seu problema

pmlm

Errado. Um objecto Date não tem formato.

De onde obténs esses dois valores? Provavelmente podes juntar tudo já num único Date antes.

U

pmlm:
ulysses:

private Date data; // já esta no formato dd/MM/yyyy
private Date time; // já esta no formato HH:mm:ss


Errado. Um objecto Date não tem formato.

De onde obténs esses dois valores? Provavelmente podes juntar tudo já num único Date antes.

Não tem mesmo não, mas eu já to informando que eles já estão nesse formato pra ninguém gastar seu tempo falando do SimpleDateFormat.
Esses valores vem de um arquivo txt.

Agora minha duvida é o seguinte só quero saber como faz pra acrescentar a hora na data.

rodrigues_sis

ulysses,

Acredito que a classe Calendar pode te ajudar:

Calendar data = Calendar.getInstance();
U

rodrigues_sis:
ulysses,

Acredito que a classe Calendar pode te ajudar:

Calendar data = Calendar.getInstance();

Estou fazendo algumas pesquisas aqui e tbm estou vendo a API dela

pmlm

Se vêm de um arquivo txt, o SimpleDateFormat deve ser mesmo a solução!

String data = // data lida do txt no formato dd/MM/yyyy;
String hora = //hora lida do txt no formato HH:mm:ss;

Date data = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse(data + " " + hora);
rodrigues_sis

blza… qualquer duvida posta ai…

ulysses:
rodrigues_sis:
ulysses,

Acredito que a classe Calendar pode te ajudar:

Calendar data = Calendar.getInstance();

Estou fazendo algumas pesquisas aqui e tbm estou vendo a API dela

U
pmlm:
ulysses:
Não tem mesmo não, mas eu já to informando que eles já estão nesse formato pra ninguém gastar seu tempo falando do SimpleDateFormat. Esses valores vem de um arquivo txt.

Se vêm de um arquivo txt, o SimpleDateFormat deve ser mesmo a solução!

String data = // data lida do txt no formato dd/MM/yyyy;
String hora = //hora lida do txt no formato HH:mm:ss;

Date data = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse(data + " " + hora);

Vou mostra um pouco do código para todos compreenderem melhor

// ************************************
// Alguns métodos da classe - controle
// ************************************

	public void capturaAquisicoesLista() throws IOException, Excecao {

		String linha = this.br.readLine(); // primeira linha
		String cabecalho2 = "Num. Registro         Horário           Data           Canal 1                Canal 2";
		String cab3 = "num. registro         hor�rio           data           canal 1                canal 2";

		while (linha != null) { // inicia laço
			if (linha.equalsIgnoreCase(cabecalho2)
					|| (linha.equalsIgnoreCase(cab3))) { // quando encontra a linha do cabeçalho ele para
				break;
			}
			linha = this.br.readLine();
		}

		linha = this.br.readLine(); // pega a proxima linha
		while (linha != null) { // inicia laço
			this.listaArquivo.add(linha); // armazena as linhas em uma lista
			linha = this.br.readLine();
		}
		this.br.close();

		// Cria uma lista de objetos ELCO701Aquisicoes
		this.listaAquisicoes = new Vector<EAquisicao>();

		int x = 0; // indicador de posição dos dados separado

		for (int i = 0; i < this.listaArquivo.size(); i++) {
			String[] separados = this.listaArquivo.get(i).split("\\s+"); // retira os espaços entre os dados deixando apenas um.

			// Cria o objeto ELCO701Aquisicoes
			this.aquisicao = new EAquisicao();

			for (String separado : separados) { // separa os dados da linha
				// setas os dados separados de acordo com seu index e variavel

				if (x == 1) {
					this.aquisicao.setHora(oData
							.converter(separado, "HH:mm:ss"));
				}
				if (x == 2) {
					this.aquisicao.setData(oData.converter(separado,
							"dd/MM/yyyy"));
				}
				if (x == 3) {
					this.aquisicao.setDp(new BigDecimal(separado.replaceAll(
							",", ".")));
				}
				if (x == 4) {
					this.aquisicao.setP(new BigDecimal(separado.replaceAll(",",
							".")));
				}
				x++;
			}

			this.listaAquisicoes.add(this.aquisicao);
			x = 0;
		}

	}

// Metodo de Vazão, ele pega dados de vazão e compara com a hora

public void onClick$btnGrafico() throws SuspendNotAllowedException,
			InterruptedException, Excecao {
		this.janelaGrafico.setParent(this.win);
		this.janelaGrafico.doModal();

		TimeSeries series = new TimeSeries("Vazão", Second.class);
		int contador = 1;
		for (Object item : this.lbxPlanilha.getSelectedItems()) {
			Listitem itemLista = (Listitem) item;
			if (itemLista.getValue() != null) {
				EAquisicao entidade = (EAquisicao) itemLista.getValue();
				//Hour hour = ;
					
			        // neste ponto é onde ele adiciona os valores no gráfico, em vez de adicionar entidade.getHora(), quero adicionar a data com a hora
                                // por qual motivo? simples pois pode exister dados capturados de 3 dias, de 1 semana, de 1 hora, de 1 dia.
                                // desse jeito que esta ele recebera os dados de 1 dia e horas normal, agora quando vai ser mais de 1 dia, passara a dar erro, pois vai da conflito de hora.
				series.add(new Second(entidade.getHora()), entidade.getVazao());
				contador++;
			}
		}
		
		 final TimeSeriesCollection dataset = new TimeSeriesCollection(series);
	        final JFreeChart chart = ChartFactory.createTimeSeriesChart(
	            "Vazão",
	            "Hora", 
	            "Vazão",
	            dataset,
	            true,
	            true,
	            false
	        );
	        
	        //XYPlot plot = chart.getXYPlot();
	        //plot.setBackgroundPaint(paint);

	        
	     // Cria imagem do gráfico   
	        
		ChartRenderingInfo info = new ChartRenderingInfo();
		BufferedImage bi = chart.createBufferedImage(500, 300,
				Transparency.TRANSLUCENT, info);

		try {
			byte[] bytes = EncoderUtil.encode(bi,
					org.jfree.chart.encoders.ImageFormat.PNG, true);
			AImage image = new AImage(this.titulo, bytes);
			janelaGrafico$graficoTimeSeries.setContent(image);
		} catch (IOException e) {
			throw new Excecao(e.getMessage(), TiposExcecao.ERRO_SISTEMA);
		}

	}


// ************************************
// Classe do objeto Aquisição
// ************************************

public class EAquisicao {

  private Date data;
  private Date hora;
  private BigDecimal dp;
  private BigDecimal p;
  private BigDecimal velocidade;
  private BigDecimal vazao;
  private BigDecimal total;

  public Date getData() {
    return this.data;
  }

  public void setData(Date data) {
    this.data = data;
  }

  public Date getHora() {
    return this.hora;
  }

  public void setHora(Date hora) {
    this.hora = hora;
  }

  public BigDecimal getDp() {
    return this.dp;
  }

  public void setDp(BigDecimal dp) {
    this.dp = dp;
  }

  public BigDecimal getP() {
    return this.p;
  }

  public void setP(BigDecimal p) {
    this.p = p;
  }

  public BigDecimal getVelocidade() {
    return this.velocidade;
  }

  public void setVelocidade(BigDecimal velocidade) {
    this.velocidade = velocidade;
  }

  public BigDecimal getVazao() {
    return this.vazao;
  }

  public void setVazao(BigDecimal vazao) {
    this.vazao = vazao;
  }

  public BigDecimal getTotal() {
    return this.total;
  }

  public void setTotal(BigDecimal total) {
    this.total = total;
  }

}
pmlm
for (int i = 0; i < this.listaArquivo.size(); i++) {  
            String[] separados = this.listaArquivo.get(i).split("\\s+"); // retira os espaços entre os dados deixando apenas um.  
  
            // Cria o objeto ELCO701Aquisicoes  
            this.aquisicao = new EAquisicao();  
  
            for (String separado : separados) { // separa os dados da linha  
                // setas os dados separados de acordo com seu index e variavel  
  
                if (x == 1) {  
                    this.aquisicao.setHora(oData  
                            .converter(separado, "HH:mm:ss"));  
                }  
                if (x == 2) {  
                    this.aquisicao.setData(oData.converter(separado,  
                            "dd/MM/yyyy"));  
                }  
                if (x == 3) {  
                    this.aquisicao.setDp(new BigDecimal(separado.replaceAll(  
                            ",", ".")));  
                }  
                if (x == 4) {  
                    this.aquisicao.setP(new BigDecimal(separado.replaceAll(",",  
                            ".")));  
                }  
                x++;  
            }  
  
            this.listaAquisicoes.add(this.aquisicao);  
            x = 0;  
        }

Para que o for de dentro?

for (int i = 0; i < this.listaArquivo.size(); i++) {  
            String[] separados = this.listaArquivo.get(i).split("\\s+"); // retira os espaços entre os dados deixando apenas um.  
  
            // Cria o objeto ELCO701Aquisicoes  
            EAquisicao aquisicao = new EAquisicao();  
   
            aquisicao.setDataHora(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse(separados[2] + " " + separados[1] ));

            aquisicao.setDp(new BigDecimal(separados[3].replaceAll(",", ".")));  
            aquisicao.setP(new BigDecimal(separados[4].replaceAll(",", ".")));  
                
            this.listaAquisicoes.add(aquisicao);  
            x = 0;  
        }
U
pmlm:

Para que o for de dentro?

for (int i = 0; i < this.listaArquivo.size(); i++) {  
            String[] separados = this.listaArquivo.get(i).split("\\s+"); // retira os espaços entre os dados deixando apenas um.  
  
            // Cria o objeto ELCO701Aquisicoes  
            EAquisicao aquisicao = new EAquisicao();  
   
            aquisicao.setDataHora(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse(separados[2] + " " + separados[1] ));

            aquisicao.setDp(new BigDecimal(separados[3].replaceAll(",", ".")));  
            aquisicao.setP(new BigDecimal(separados[4].replaceAll(",", ".")));  
                
            this.listaAquisicoes.add(aquisicao);  
            x = 0;  
        }

o primeiro for vai percorrer linha por linha tirando a tabulação do arquivo txt.
por isso o uso do slpit.

Tabela de Aquisições
Num. Registro         Horário           Data           Canal 1                Canal 2
00001                 10:55:58          17/09/2010     0,58                    0              
00002                 10:56:01          17/09/2010     230,0                    0              
00003                 10:55:58          18/09/2010     0,60                    0              
00004                 10:56:01          18/09/2010     0,65                    0              
00005                 10:55:58          19/09/2010     0,67                    0              
00006                 10:56:01          19/09/2010     0,90                    0              
00007                 10:55:58          20/09/2010     0,100                    0

agora esse foreach, ele pega a linha e percorre ela separando os dados e armazena em atributos do objeto.

Exemplo:

quando percorrer o primeiro for ele pegara a primeira linha e vai retirar os espaços, ficara assim:
00001 10:55:58 17/09/2010 0,58 0

agora entra o foreach, que pegara essa linha e separa os dados nela
primeiro pegara o 00001 que vou descarta ele nao é setado em nenhum atributo do objeto
depois pega a hora 10:55:58 e seta.

if (x == 1) {  
                    this.aquisicao.setHora(oData  
                            .converter(separado, "HH:mm:ss"));
depois a data.
if (x == 2) {  
                    this.aquisicao.setData(oData.converter(separado,  
                            "dd/MM/yyyy"));

e assim por diante

pmlm

Eu percebi o que querias fazer. O que eu estava a perguntar era porque usar o for se podes fazer como eu fiz lá na mesma resposta.

U

Achei a solução, eu esperava que estivesse outra mais o jeito foi converte a data e hora para String para depois juntar e adicionar em uma variável Date no formato
que eu queria.

Date data = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse(oData.formatar(entidade.getData(), "dd/MM/yyyy") +" "+ oData.formatar(entidade.getHora(), "HH:mm:ss"));
pmlm

Para que converter String para Date para depois converter novamente para String e outra vez para Date? Viste sequer o código que eu fiz?

U

vi sim, mas só que se eu fazer o que vc falo, vou ter que separar depois, pois tenho outros métodos aqui que vão utilizar data e hora separados.
Melhor juntar depois do que separar :smiley:

pmlm

Nesse caso…

aquisicao.setData(new SimpleDateFormat("dd/MM/yyyy").parse(separados[2]));  
aquisicao.setHora(new SimpleDateFormat("HH:mm:ss").parse(separados[1] ));  
aquisicao.setDataHora(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse(separados[2] + " " + separados[1] ));
U

pmlm:
Nesse caso…

aquisicao.setData(new SimpleDateFormat("dd/MM/yyyy").parse(separados[2])); aquisicao.setHora(new SimpleDateFormat("HH:mm:ss").parse(separados[1] )); aquisicao.setDataHora(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse(separados[2] + " " + separados[1] ));

Mais isso acho que não seria uma boa pratica, criar um atributo dentro do objeto para armazena data e hora, que sera usado apenas uma vez.
Nem o que eu fiz é uma boa pratica, ate quando nao tiver uma solução melhor sem usar conversão, o jeito vai ser usa uma dessas 2 formas kkkkk

Criado 5 de dezembro de 2012
Ultima resposta 7 de dez. de 2012
Respostas 16
Participantes 4