Datas, GregorianCalendar e SimpleDateFormat

1 resposta
F

Gente, o código a seguir faz parte de uma aplicação bem maior, mas afim de isolar apenas esse problema, eu preferi criar uma aplicação isolada e completamente funcional.

import java.util.Scanner;
import java.util.StringTokenizer;

import java.util.Calendar;
import java.util.GregorianCalendar;

public class TestandoProcessamentoDatas
	{
		private static int dia1;
		private static int mes1;
		private static int ano1;
		private static int dia2;
		private static int mes2;
		private static int ano2;
		
		public static void main(String[] args)
			{
				String data1, data2;
				
				Scanner input = new Scanner(System.in);
				
				System.out.println("Insira a 1ª data no formato DD/MM/AAAA");
				data1 = input.nextLine();
				System.out.println("Insira a 2ª data no formato DD/MM/AAAA");
				data2 = input.nextLine();
				
			    processadata(data1,true);
			    processadata(data2,false);
				
				System.out.println(dia1 + "-" + mes1 + "-" + ano1);
				System.out.println(dia2 + "-" + mes2 + "-" + ano2);
			}
		
	    public static void processadata(String data, boolean isData1){
	        StringTokenizer tok = new StringTokenizer(data, "/");
	        while(tok.hasMoreTokens()) {
	          if(isData1){
	            dia1 = Integer.parseInt(tok.nextToken());
	            mes1 = Integer.parseInt(tok.nextToken());
	            ano1 = Integer.parseInt(tok.nextToken());
	          } else {
	            dia2 = Integer.parseInt(tok.nextToken());
	            mes2 = Integer.parseInt(tok.nextToken());
	            ano2 = Integer.parseInt(tok.nextToken());
	          }
	          
	        GregorianCalendar data1 = new GregorianCalendar(ano1, mes1, dia1);
	        GregorianCalendar data2 = new GregorianCalendar(ano2, mes2, dia2);
	        
	        data2.add(Calendar.DAY_OF_MONTH, 1);
	        
	        dia1 = data1.get(Calendar.DAY_OF_MONTH);
	        mes1 = data1.get(Calendar.MONTH);
	        ano1 = data1.get(Calendar.YEAR);
	        
	        dia2 = data2.get(Calendar.DAY_OF_MONTH);
	        mes2 = data2.get(Calendar.MONTH);
	        ano2 = data2.get(Calendar.YEAR);    
	        }
	      }

	}

O fato é o seguinte, infelizmente, por causa do modo como a tabela que eu leio no banco de dados está organizada, eu realmente preciso de variáveis separadas para dia/mes/ano. Mas na tabela na qual eu escrevo eu preciso utilizar uma única string, daí eu precisar reformatar a data, eu uso o gregorian calendar pelo simples fato de eu precisar incrementar em um dia a segunda data (um erro imbecil do banco de dados, não me peçam para explicar), mas o problema, é que o gregorian calendar formata as datas sem o zero na frente.

exemplo:

eu recebo dele: 3/5/2008

e eu preciso: 03/05/2008

Entendem? Por isso eu estava pensando em utilizar o simple date format, mas pra falar a verdade, nunca utilizei ele antes, alguém tem alguma sugestão?

Muito obrigado desde já.

1 Resposta

Marky.Vasconcelos

Voce pode fazer um método assim:

public GregorianCalendar parseData(String obj) {
			GregorianCalendar calendar = new GregorianCalendar();
			String[] split = obj.split("/");
			calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(split[0]));
			calendar.set(Calendar.MONTH, Integer.parseInt(split[1]));
			calendar.set(Calendar.YEAR, Integer.parseInt(split[2]));
			return calendar;
		}

Nesse caso funcionaria tanto para String 3/5/2008 quanto para 03/05/2008

Criado 4 de dezembro de 2008
Ultima resposta 4 de dez. de 2008
Respostas 1
Participantes 2