[RESOLVIDO]como criar um campo de data?

5 respostas
vinnyparker

Ola pessoal, continuando com meus problemas na conversao de DBF para firebird.

agora eh o seguinte:
no banco tem um campo chamado movimento.
esse campo é uma String que contei ano/mes
ex.:2010/01

eu preciso que esse campo ai seja uma DATA.
ex.:

2010.01.31

Alguem tem uma ideia?

5 Respostas

TerraSkilll

vinnyparker
Você não sabe como criar um campo data no Firebird ou não sabe como fazer a importação?

Se for para criar um campo data, o Firebird tem o tipo date, que armazena datas. A sintaxe em sql é:

nomedocampo date

Como exemplo, ao adicionar numa tabela de pedidos fazemos:

alter table pedidos add dtpedido date;

Se o seu problema for a importação, usar funções de String para colocar a data no formato dd/mm/yyyy ou mm/dd/yyyy, e aí você converte para data e grava no banco.

Abraço.

vinnyparker

TerraSkilll:
vinnyparker
Você não sabe como criar um campo data no Firebird ou não sabe como fazer a importação?

Se for para criar um campo data, o Firebird tem o tipo date, que armazena datas. A sintaxe em sql é:

nomedocampo date

Como exemplo, ao adicionar numa tabela de pedidos fazemos:

alter table pedidos add dtpedido date;

Se o seu problema for a importação, usar funções de String para colocar a data no formato dd/mm/yyyy ou mm/dd/yyyy, e aí você converte para data e grava no banco.

Abraço.

Absolutamente, o problema nao eh com o firebird, e sim com a importacao de dados.
a minha tabela necessida de um campo de data, que a tabela em dbf nao tem. ao contrario ela so tem um campo chamado movimento que so tem ano e mes, como eu disse a cima.
eu tentei da seguinte forma:

String data = null;

	
	if ("MOVIMENTO".equals(field.getName())) {
							fieldValue = ((String) record[i]).trim();						
							data = (StrHelper.removeSigns(StrHelper.insert(data, "/28", 8)));
						}
						Date data2 = DateHelper.dateFormat(data);

mas nao to conseguindo nao… alguma coisa ta errado…

vinnyparker

Bom, eu consegui fazer em parte… modifiquei bem o meu codigo. so tem um problema…

ele ta pegando um mes a frente. por exemplo
a primeira data que eu tenho eh 31.01.2001
e ele ta iniciando em 28.02.2001

segue meu codigo

if ("MOVIMENTO".equals(field.getName())) {
							fieldValue = ((String) record[i]).trim();
							ano2 = (StrHelper.substringBefore(fieldValue, "/"));
						}
						
						if ("MOVIMENTO".equals(field.getName())) {
							fieldValue = ((String) record[i]).trim();
							mes = (StrHelper.substringAfter(fieldValue, "/"));

						}
					
			
				/**inicio dos tratamentos**/
				
					

				int ano3 = Integer.parseInt(ano2);
				
				int mes2 = Integer.parseInt(mes);
				
				Date data4 = DateHelper.parse(ano3, mes2, 28);

Basicamente eu decompus a String que eu tinha em 2 variaveis diferentes
usando o DateHelper eu formato a data, setando o dia que eu quero.
porem ele ta iniciando no mes 02, e o primeiro mes eh 01.

alguem tem uma ideia do que possa ser?
ano e mes

dudaskank

Bom, pra ter certeza, teria que ver como está o seu parser... mas tenho quase certeza que é porque, na classe GregorianCalendar, janeiro é o 0... olha um teste que fiz aqui:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class ConverteData {

	public static void main(String[] args) {
		String anoMes = "2010/01";
		// faz uma mágica e pega o ano e mês
		int ano, mes;
		ano = Integer.parseInt(anoMes.substring(0, 4));
		mes = Integer.parseInt(anoMes.substring(5));
		System.out.println(ano);
		System.out.println(mes);
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.YEAR, ano);
		// mês começa no 0, segundo o javadoc:
		// Field number for get and set indicating the month. This is a calendar-specific value. The first month of the year in the
		// Gregorian and Julian calendars is JANUARY which is 0; the last depends on the number of months in a year.
		calendar.set(Calendar.MONTH, mes - 1);
		DateFormat df = new SimpleDateFormat();
		System.out.println(df.format(calendar.getTime()));
	}
}

a saída é:

2010
1
03/01/10 16:59
vinnyparker

resolvi de uma maneira muito simples

usei o mesmo codigo, mas como ele tava aumentando um mes eu coloquei um “-1” e pronto

o codigo ficou assim:

1. if ("MOVIMENTO".equals(field.getName())) { 2. fieldValue = ((String) record[i]).trim(); 3. ano2 = (StrHelper.substringBefore(fieldValue, "/")); 4. } 5. 6. if ("MOVIMENTO".equals(field.getName())) { 7. fieldValue = ((String) record[i]).trim(); 8. mes = (StrHelper.substringAfter(fieldValue, "/")); 9. 10. } 11. 12. 13. /**inicio dos tratamentos**/ 14. 15. 16. 17. int ano3 = Integer.parseInt(ano2); 18. 19. int mes2 = Integer.parseInt(mes); 20. 21. Date data4 = DateHelper.parse(ano3, mes2 -1, 28);

Obg pelas dicas!

Criado 3 de maio de 2010
Ultima resposta 4 de mai. de 2010
Respostas 5
Participantes 3