Formatar data

7 respostas
cleriston

Olá galera… Estou estudando J2ME
No RMS, para gravar data estou utilizando String, pois nao achei um writeDate.
Então qdo uso :

ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeUTF(meuObjeto.getData().ToString);

Ele grava “Web Feb 06 00:00:00 GMT-03:00 2008”.
Eu gostaria que gravasse 06/02/2008.
Eu utilizer o “Formatter” mas só funcionou no emulador do wtk, no meu cel nao funcionou (Sony Ericsson W200i)
Existe outro jeito de formatar data e numero sem ser o Formatter?
Ou existe um jeito de utilizar o Formatter no meu cel?

Desde já fico grato

7 Respostas

doug

Olá cleriston
Tenta usar o dateformat, passando a máscara… depois você parsear

blz… flws
espero ter ajudado

cleriston

desculpe se for muito idiota a pergunta, mas pelo q vi aqui meu cel nao tem suporte mesmo a jsr 238… Tem como instalar isso no meu cel?

P

Não existe jeito para instalar qualquer JSR. Ou ela vem de fábrica ou nada feito.

Quanto a formatação, vc pode gravar ela como um long usando writeLong(date.getTime() ou System.currentTimemillis()) que funfa.

Para gravar formatado, vc vai ter que usar a classe Calendar, usando como parãmetro de alimentação o teu Date.

Depois é só usar o método get, especificando o que vc quer que a classe retorne (dia, mes ou ano) e formatar isto adequadamente usando um StringBuffer.

cleriston

sem querer abusar, mas jah abusando, como faço para formatar o valor com 2 casas ?

P

cleriston:
sem querer abusar, mas jah abusando, como faço para formatar o valor com 2 casas ?

valorFormatado = "";
valor = 2;

if (valor > 9) {
   valorFormatado ="0";
}

valorFormatado = valorFormatado + valor;

Explicação, se o valor é menor que 10, é necessário você adicionar um "0" (zero) na frente, senão não precisa.
Este código é bem tosco mesmo, apenas para lhe dar uma idéia.

Faça ele direitinho como te expliquei, usando o StringBuffer e diversas chamadas de append.

cleriston

Deu certinho :D
O q eu fiz para o número tah meio tosco, falta arredondar e melhorar o código
segue abaixo

import java.util.Calendar;
import java.util.Date;


public class DataString {
	Date data;

	public DataString(Date data) {
		super();
		this.data = data;
	}
	
	public String getData(){		
		
		StringBuffer dtFormatada = new StringBuffer();
		Calendar cld = Calendar.getInstance();
		cld.setTime(data);
		dtFormatada.append(getString(cld.get(Calendar.DAY_OF_MONTH)));
		dtFormatada.append("/");
		dtFormatada.append(getString(cld.get(Calendar.MONTH)+1));
		dtFormatada.append("/");
		dtFormatada.append(getString(cld.get(Calendar.YEAR)));				
		
		return dtFormatada.toString();		
		
	}
	
	private String getString(int inteiro){
		String texto = String.valueOf(inteiro);
		if (texto.length() == 1){
			texto = "0".concat(texto);
		}		
		return texto;
	}

}
public class NumeroString {
	private double numero;

	public NumeroString(double numero) {
		super();
		this.numero = numero;
	}

	public String getNumero() {
		String snumero = String.valueOf(numero);
		StringBuffer sbnumero = new StringBuffer(snumero.substring(0, snumero
				.indexOf(".")));
		if (snumero.length() >= snumero.indexOf(".") + 1) {
			sbnumero.append(snumero.substring(snumero.indexOf("."), snumero
					.indexOf(".") + 1));
		}
		if (snumero.length() >= snumero.indexOf(".") + 2) {
			sbnumero.append(snumero.substring(snumero.indexOf(".")+1, snumero
					.indexOf(".") + 2));
		}
		if (snumero.length() >= snumero.indexOf(".") + 3) {
			sbnumero.append(snumero.substring(snumero.indexOf(".")+2, snumero
					.indexOf(".") + 3));
		}
		return sbnumero.toString();
	}

}
P
cleriston:
Deu certinho :D O q eu fiz para o número tah meio tosco, falta arredondar e melhorar o código segue abaixo
import java.util.Calendar;
import java.util.Date;


public class DataString {
	Date data;

	public DataString(Date data) {
		super();
		this.data = data;
	}
	
	public String getData(){		
		
		StringBuffer dtFormatada = new StringBuffer();
		Calendar cld = Calendar.getInstance();
		cld.setTime(data);
		dtFormatada.append(getString(cld.get(Calendar.DAY_OF_MONTH)));
		dtFormatada.append("/");
		dtFormatada.append(getString(cld.get(Calendar.MONTH)+1));
		dtFormatada.append("/");
		dtFormatada.append(getString(cld.get(Calendar.YEAR)));				
		
		return dtFormatada.toString();		
		
	}
	
	private String getString(int inteiro){
		String texto = String.valueOf(inteiro);
		if (texto.length() == 1){
			texto = "0".concat(texto);
		}		
		return texto;
	}

}
public class NumeroString {
	private double numero;

	public NumeroString(double numero) {
		super();
		this.numero = numero;
	}

	public String getNumero() {
		String snumero = String.valueOf(numero);
		StringBuffer sbnumero = new StringBuffer(snumero.substring(0, snumero
				.indexOf(".")));
		if (snumero.length() >= snumero.indexOf(".") + 1) {
			sbnumero.append(snumero.substring(snumero.indexOf("."), snumero
					.indexOf(".") + 1));
		}
		if (snumero.length() >= snumero.indexOf(".") + 2) {
			sbnumero.append(snumero.substring(snumero.indexOf(".")+1, snumero
					.indexOf(".") + 2));
		}
		if (snumero.length() >= snumero.indexOf(".") + 3) {
			sbnumero.append(snumero.substring(snumero.indexOf(".")+2, snumero
					.indexOf(".") + 3));
		}
		return sbnumero.toString();
	}

}

Muito bem...é isto aí..

Como melhoria, reduzindo o número de Strings criadas...
StringBuffer dtFormatada = new StringBuffer();
		Calendar cld = Calendar.getInstance();
		cld.setTime(data);
                  final int dia = cld.get(Calendar.DAY_OF_MONTH);
                  if (dia < 10) {
                     dtFormatada.append('0');
                  }
                  dtFormatada.append(dia);
                  ...
                 e assim por diante...
		
		return dtFormatada.toString();
Criado 6 de fevereiro de 2008
Ultima resposta 7 de fev. de 2008
Respostas 7
Participantes 3